从现有数组初始化向量

时间:2010-08-20 00:24:59

标签: c++ vector

const int NUMB = 4;
int n[] = {5,6,7,8};

// create a vector of strings using the n[] array
vector<int> partnums(n, n + NUMB);

类函数向量名称(src.begin,src.end)

  

创建一个初始化的向量   来自源容器的元素   从src.begin开始到结束于   scr.end

根据这本书,

  

向量partnums声明为a   vector类型int并初始化为   来自n数组的元素,从头开始   第一个数组元素为n [0],和   以最后一个数组元素结尾   位于位置n + NUMB。

我还是不明白。 “位于位置n + NUMB,索引是否从0开始? 或者编译器知道这个src.end是指位置1(scr.begin),并从数组n中的那个位置开始计数,并计入第4个位置)?

谢谢

4 个答案:

答案 0 :(得分:6)

C ++标准库使用一种约定,即'end'迭代器实际上是指一个元素超过结尾,所以在你的情况下'begin'将是第0个位置而'end'将是第四个(不是第三个)位置。

上面的引文令人困惑的是n + NUMB被称为数组中的最后一个元素,这是不正确的。它是(虚构的)元素数组中的最后一个元素之后,只是用作结束标记。

答案 1 :(得分:4)

来自cplusplus.com

  

将迭代器输入到序列中的初始位置和最终位置。使用的范围是[first,last),其中包括first和last之间的所有元素,包括first指向的元素,但不包括last指向的元素。

n指向数组的开头,n + NUMB充当指针算术,有效地将n递增sizeof(int) * NUMB。所以n + NUMB指向数组的“结束”(实际上超出数组的第一个地址)。由于初始化程序中给出的“结束”是非包含,因此它涵盖了数组中的所有元素(索引0-3,或者在一般情况下索引0到( NUMB - 1 )

答案 2 :(得分:3)

我发现的最好的文章之一是here解释“一个接一个”的概念

答案 3 :(得分:1)

n + NUMB是指向最后一个元素的指针+ 1或IOW超出数组大小的一个位置。

复制时从n + 0开始并复制到最后一个元素