这表明我可以从数组构造一个向量,如下所示:
// the iterator constructor can be used to construct from arrays:
int myints[] = {16,2,77,29};
vector<int> myvector (myints, myints + sizeof(myints) / sizeof(int) );
为什么构造函数的第二个参数是myints + sizeof(myints) / sizeof(int)
?
表达式 sizeof(myints) / sizeof(int)
获取myints
数组中元素的数量。
myints
获取指向数组第一个元素的指针。
因此,表达式myints + sizeof(myints) / sizeof(int)
是一个指针,位于myints
数组末尾之后,这正是双迭代器构造函数所std::vector
期望的。这将创建一个向量,其中包含原始数组中所有元素的副本。
请记住,指针是迭代器,所以上面等价于
vector<int> myvector (std::begin(myints), std::end(myint));
sizeof(myints) / sizeof(int)
是数组中元素的数量。
myints + sizeof(myints) / sizeof(int)
为您提供超出数组末尾的内存位置。
STL 对第一个元素使用迭代器,并在结束时使用迭代器来指定范围。矢量构造函数正在使用这样的范围。
它在最后一个元素之后获取指向int的指针。所以它变成了 begin() 和 end()