从数组构造向量

时间:2012-09-26 20:45:57

标签: c++ stdvector

This表示我可以按如下方式从数组构造一个向量:

// 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)

3 个答案:

答案 0 :(得分:9)

表达式sizeof(myints) / sizeof(int)获取myints数组中的元素数。

myints获取指向数组第一个元素的指针。

因此表达式myints + sizeof(myints) / sizeof(int)是一个超过myints数组末尾的指针,这是two-iterator constructor of std::vector所期望的。这将创建一个带有原始数组中所有元素副本的向量。

请记住,指针是迭代器,因此上面等同于

vector<int> myvector (std::begin(myints), std::end(myint));

答案 1 :(得分:1)

它在最后一个元素之后获得指向 int 的指针。所以它变成了begin()和end()

答案 2 :(得分:1)

sizeof(myints) / sizeof(int) 

是数组中元素的数量。

myints + sizeof(myints) / sizeof(int)

为您提供一个超出数组末尾的内存位置。

STL使用迭代器作为第一个元素,使用一个接头来指定一个范围。向量构造函数正在使用这样的范围。