问个指针的问题

来源:百度知道 编辑:UC知道 时间:2024/09/19 15:35:57
void main(){
char st[]="abcdefjhij";
vector<char>a(st,st+10);
vector<char>::iterator p;
p=a.begin();
cout<<"p="<<p<<endl;//打印出来是abcdefjhij
a.insert(p+3,'X');
copy(a.begin(),a.end(),ostream_iterator<char>(cout," "));
cout<<"p="<<p<<endl;//打印出来是乱码
}

为什么这时候的p的值变掉了呢??无法理解
为什么执行了a.insert(p+3,'X');之后p的值发生了变化??
p的值在程序里并没有重新赋值过?难道是c++的bug?
但是执行a.insert(p,3,'A');之后p的值却没有变,这也应该移动了内存,但值却没变

插入后整块内存都移动了,迭代器位置失效了,所以打印出乱码。你可以跟进STL源码看一下,vector插入操作是可能需要重新分配内存的,所以原来位置不再有效。需要重新设置p=a.beign()

我通过单步调试发现是在执行了a.insert(p+3,'X');之后p的值发生了变化。