3
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多行..

4

1 回答 1

15

您正在调用的构造函数形式是这样的**

template <class Iterator> vector(Iterator start, Iterator end);

所以,你可以传入任何像一对迭代器一样的东西。具体来说,您可以传入两个指针,只要它们都指向同一个数组,并且第二个不位于第一个之前(如果指针相等,则它们表示一个空范围)。

在您的示例中,您传入一个指向数组第一个元素的指针和一个指向数组的(神话的)elment-after-the-last-element 的指针:

vector<int> vec(arr, arr + sizeof(arr) / sizeof(int));

通常,您可以传入一个指向任何元素的指针作为开始,并将一个指向任何元素的指针作为结束。

但是我如何用 arr 的前 3 个值初始化向量 vec?

传递指向第一个元素和第三个元素的指针:

vector<int> vec(arr, arr+3);

另外我如何用中间的 3 个值初始化它?

传入一个指向要复制的第一个项目的指针,以及一个指向粘贴最后一个元素的指针。在这种情况下,索引 1 和 4:

vector<int> vec(arr+1, arr+4);


**好吧,比这稍微复杂一些,但为了讨论,假装是可以的。实际形式是:template <class InputIterator> vector( InputIterator first, InputIterator last, const Allocator& alloc = Allocator() );

于 2012-04-24T14:00:41.797 回答