使用数组的一部分初始化向量?

cod*_*ddy 3 c++ vector

int arr[5] = {0,1,2,3,4};
vector<int> vec;
Run Code Online (Sandbox Code Playgroud)

通常我们这样做:

vector<int> vec(arr, arr + sizeof(arr) / sizeof(int));
Run Code Online (Sandbox Code Playgroud)

但是如何仅使用arr的前3个值初始化矢量vec?另外我如何用中间3值初始化它?

我必须马上初始化它,不要push_back多行...

Rob*_*obᵩ 15

你正在调用的构造函数形式是这个**:

template <class Iterator> vector(Iterator start, Iterator end);
Run Code Online (Sandbox Code Playgroud)

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

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

vector<int> vec(arr, arr + sizeof(arr) / sizeof(int));
Run Code Online (Sandbox Code Playgroud)

通常,您可以将指向任何元素的指针作为开头传递,并将指针作为结束传递给任何元素.

但是如何仅使用arr的前3个值初始化矢量vec?

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

vector<int> vec(arr, arr+3);
Run Code Online (Sandbox Code Playgroud)

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

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

vector<int> vec(arr+1, arr+4);
Run Code Online (Sandbox Code Playgroud)


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