int arr[5] = {0,1,2,3,4};
vector<int> vec;
通常我们会这样做:
vector<int> vec(arr, arr + sizeof(arr) / sizeof(int));
但如何仅使用 arr 的前3个值初始化矢量 vec ? 另外我如何用中间3值初始化它?
我必须马上初始化它,多行没有push_back
..
答案 0 :(得分:15)
您正在调用的构造函数表单是 ** :
template <class Iterator> vector(Iterator start, Iterator end);
因此,您可以传入任何类似于一对迭代器的东西。具体来说,你可以传入两个指针,只要它们都指向同一个数组,并且只要第二个指针不在第一个指针之前(如果指针相等,它们代表一个空范围)。
在你的例子中,你传入一个指向数组的第一个元素的指针和一个指向数组的(神话)elment-after-the-last元素的指针:
vector<int> vec(arr, arr + sizeof(arr) / sizeof(int));
通常,您可以将指向任何元素的指针作为开头传递,并将指针作为结尾传递给任何元素。
但是如何初始化只有前3个arr值的矢量vec?
传递指向第一个元素和第三个元素的指针:
vector<int> vec(arr, arr+3);
另外,我如何用中间3值初始化它?
传入指向要复制的第一个项目的指针,并指向一个粘贴最终元素的指针。在这种情况下,索引1和4:
vector<int> vec(arr+1, arr+4);
<小时/> ** 好的,it is slightly more complicated than that,但是可以假装为了这个讨论。实际形式为:
template <class InputIterator>
vector( InputIterator first, InputIterator last,
const Allocator& alloc = Allocator() );