假设我有INTS的载体,矢量指针位置有保证吗?
std::vector<int> numbers;
被填充了一堆价值的,后来我说做这个(其中一个条目,为43存在)
int *oneNumber = &numbers[43];
是oneNumber保证总是指向索引43处的int,即使我说我将数字调整为诸如numbers.resize(46)之类的东西?
我不是100%确定这里预期的行为是什么,我知道向量保证是连续的,但不确定这个连续性是否也意味着向量中的所有索引在整个生命周期中都保持在同一个地方。
出于这个原因,我总是小心翼翼创造价值类型的载体,因为我必然需要一个指向矢量内的对象。所以我保存了一个引用,例如'int * ref =&numbers [43]'..稍后,将'push_back'变成'numbers'和WHAMMO!错误:'ref'是无效的,因为'numbers'已经完全重新分配并保存在完全不同的内存空间中。 – bobobobo 2013-01-05 00:41:58
@bobobobo非常真实。尽管在创建时已知元素数量的情况(并且不能,我不能使用'std :: array',因为我'emplace'-通过循环构造值),'reserve'保证所有的指针/迭代器进入向量将保持有效,只要它的大小不超过当前的容量(这可能迫使重新分配并因此移动所包含的值的地址)。这为我节省了几次,但是每次连续的时间,我都忘记“保留”,并且在我记忆的时候,划伤我的头脑一段时间。 :D – 2016-01-12 18:46:49