保留后使用std :: vector :: data

abe*_*ier 12 c++ vector stdvector language-lawyer

我有一个std::vector在我称之为reserve一个较大的值.然后我检索data().

由于迭代data然后崩溃,我想知道这是否是允许的.被reserve强制更新data已分配内存的范围是多少?

Ker*_* SB 14

保证reserve是后续插入不重新分配,因此不会导致失效.而已.没有进一步的保证.


son*_*yao 11

reserve强制更新data已分配内存的范围是多少?

不.标准只保证std::vector::data返回指针并且[data(), data() + size())是有效范围,capacity不关心.

§23.3.11.4/ 1矢量数据[vector.data]:

返回:指针,这[data(), data() + size())是一个有效的范围.对于非空向量,data() == addressof(front()).