我一直在想这个。
#include <iostream>
#include <vector>
int main() {
std::vector<int> a;
std::vector<int *> b;
a.push_back(13);
b.push_back(&a.back());
a.push_back(24);
b.push_back(&a.back());
for (std::vector<int>::iterator it = a.begin(); it != a.end(); ++it)
std::cout << *it << " ";
std::cout << "\n";
for (std::vector<int *>::iterator it = b.begin(); it != b.end(); ++it)
std::cout << *(*it) << " ";
std::cout << "\n";
return 0;
}
输出:
13 24
16712910 24
我真的很想知道,为什么两条输出线不匹配。我在这里错过了什么?我用 gcc 4.6.3 编译了这个
最佳答案
发生这种情况是因为 vector
在第二次 push_back
期间增长并重新分配了元素。当您执行第二个 push_back
时, vector 可能会发现其容量已满并分配新空间并将元素移动到新内存。它还释放先前分配的内存。由于您正在存储此已释放内存位置的地址,因此您会看到垃圾值。要解决此问题,您需要执行 a.reserve(2)
以便在 push_back 的 2 个整数期间不会重新分配 vector 。
关于c++ - vector.back() 的意外值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16712140/