用指针来操作c++ vector 时出现的问题。

我写了这样的一个函数来说明我的问题:
#include <iostream>
#include <vector>

using namespace std;

int main()
{
vector<int> v1;
v1.push_back(1);
int *p1 = &v1[0];
cout << "p1所对应地址和值:" << p1 << "," << *p1 << endl;//p1的初始所对应地址和值
v1.push_back(2);
cout << "p1所对应地址和值:" << p1 << "," << *p1 << endl;//vector压入新元素之后,p1所对应地址和值

return 0;
}
运行结果如下:

为什么在压入新元素之后,指针p1会出现这样的问题?谢谢!


   注意,任何改变容器大小的操作都可能造成以前的迭代器失效。

 

 

 

 

 

 

 

是std中vector的实现机制问题。

vector不像数组那样分配了内存就不再变动了。

你压入新元素之后,std中vector重新分配变量的存储,你的指针地址没变,但是vector不再把原来的数据存在那个位置了。

 

我用vs2008调试了一下你的数据,说明了这一点。   Std我仅仅是拿过来用一下,具体实现机制并不是很了解细节,只是有个大概的假定认为std就应该是那样实现的,所以我的答案并不一定正确,LZ自行斟酌。

 

附:调试截图

 

 

 

我改了一下你的程序,重新调试,就更能说明问题了,调试截图如下:

 

温馨提示:答案为网友推荐,仅供参考
相似回答