【发布时间】:2017-06-06 07:02:29
【问题描述】:
std::vector<int> v;
v.push_back(1);
int &r0=v[0],*p0=&v[0];
v.insert(v.begin(),0);
for (int i=2; i<1000000; i++) v.push_back(i);
在我插入和添加其他元素后,是否整个向量可能会转移到不同的内存位置?
那么 r0 和 p0 会返回什么?
如果向量发生了变化,我猜 p0 将指向垃圾,但引用仍然有效(即返回 0)?引用是否类似于宏替换?
【问题讨论】:
-
宏替换与其他任何东西完全不同。您的代码将创建一个悬空引用
-
矢量本身,
v,永远不会移动。 -
你确定 molbdnilo 吗? cplusplus.com/reference/vector/vector 声明“在内部,向量使用动态分配的数组来存储它们的元素。这个数组可能需要重新分配,以便在插入新元素时增大大小,这意味着分配一个新数组并将所有元素移动到它。就处理时间而言,这是一项相对昂贵的任务,因此,向量不会在每次将元素添加到容器时重新分配。”
-
std::vector::push_back: "如果新的 size() 大于 capacity() 则所有迭代器和引用(包括过去的迭代器)无效。否则只有过去的迭代器无效。" 来源:en.cppreference.com/w/cpp/container/vector/push_back -
谢谢理查德。这有帮助。
标签: c++ pointers vector reference