从数组构造向量

constructing vectors from arrays

本文关键字:向量 数组      更新时间:2023-10-16

这说明我可以从数组构造一个向量,如下所示:

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

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

sizeof(myints) / sizeof(int) 

是数组中元素的数量。

myints + sizeof(myints) / sizeof(int)

为您提供超过阵列末尾的内存位置。

STL 对第一个元素和"一个过去"元素使用迭代器来指定范围。矢量构造函数正在使用这样的范围。