2012-04-24 21 views
3
int arr[5] = {0,1,2,3,4}; 
vector<int> vec; 

通常我们:使用数组的一部分初始化矢量?

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

但如何做初始化向量VECARR的只有前3个值? 我该如何初始化它与中间3值?

我必须初始化它的时候了,在多行不push_back ..

回答

15

要调用的构造函数形式是这样的**

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

所以,你可能会传递什么这就像一对迭代器。具体来说,只要两个指针指向同一个数组,并且只要第二个指针不在第一个指针之前(如果指针相等,则它们代表空的范围),就可以传递两个指针。

在您的例子,则在将指针传递到所述阵列的所述第一元件和一个指针(神话)阵列的elment-后的,最后一个元件:

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

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

但我如何初始化矢量vec只有前3个值的ARR?

通行证在指向第一和一个过去的第三要素:

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());

+0

+1和谢谢你:) – codekiddy 2012-04-24 14:07:38

+0

小挑逗:你写了'[..]只要第二个出现在第一个'之后'。我认为这是不准确的 - 两个指针实际上可以相等。这将是一个空的范围。 – 2012-04-24 14:14:46

+0

@FrerichRaabe - 谢谢! – 2012-04-24 14:16:34