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个位置)?
谢谢
答案 0 :(得分:6)
C ++标准库使用一种约定,即'end'迭代器实际上是指一个元素超过结尾,所以在你的情况下'begin'将是第0个位置而'end'将是第四个(不是第三个)位置。
上面的引文令人困惑的是n + NUMB
被称为数组中的最后一个元素,这是不正确的。它是(虚构的)元素在数组中的最后一个元素之后,只是用作结束标记。
答案 1 :(得分:4)
将迭代器输入到序列中的初始位置和最终位置。使用的范围是[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开始并复制到最后一个元素