关于初始化vector,该怎么处理

关于初始化vector
请问如何使用数组初始化vector?

候捷的书上说:

int elem_vals[seq_size]={
1,2,4
};

vector<int> elem_seq(elem_vals, elem_vals+seq_size);

为什么第二个参数是elem_vals+seq_size而不是vector<int> elem_seq(elem_vals, seq_size);呢?

谢谢!

------解决方案--------------------
vector <int > elem_seq(elem_vals, elem_vals+seq_size); 是一个拷贝构造函数,elem_vals指向数组首元素的地址,
 elem_vals+seq_size指向数组最后一个元素之后的地址,通过次方法将数组整个赋值给vector
拷贝构造函数还有一种重载方式:vector(const vector<T> X),它将新向量初始化为向量X的拷贝。
另外向量的初始化可以用void push_back(const T&X)方法。

至于vector <int > *seq_addrs[seq_cnt]={ 
&fibonacci, &lucas, &pell 
}; 
我没有理解你括号中参数的含义,不过我估计,它应该和你的第一个问题是一样的


------解决方案--------------------
(elem_vals, elem_vals+seq_size)表示迭代器elem_vals和elem_vals+seq_size标示的范围。
vector <int > elem_seq(elem_vals, elem_vals+seq_size)整句的意思是:创建elem_seq,其元素是迭代器elem_vals和elem_vals+seq_size标示的范围内元素的副本。
------解决方案--------------------
使用vector <int > elem_seq(elem_vals, elem_vals+seq_size); 
这种方式初始化的时候要求参数是两个迭代器。使用这两个迭代器所标记范围的元素来初始化容器中的元素。指向数组的指针可以做为迭代器来使用。并且要求第一个迭代器经过递增,可以到达第二个迭代器所指位置。这样你使用seq_size,显然是不行的,他根本就不能充当迭代器。
------解决方案--------------------
vector不支持array这样的初始化, 
那么后来候捷又写道: 
vector <int > *seq_addrs[seq_cnt]={ 
&fibonacci, &lucas, &pell 
}; 
这不是和array的初始化一样吗? 为什么前面又说不可以?

seq_addrs是指向一个指针数组,每个元素都是指向vector <int >的指针类型。
跟vector根本就不同。一个是数组,一个是容器。
vector容器是不支持像数组那样的初始化的。
比如:
vector<int> ivec={1,2,3};
编译是通不过的。