C++ 解决vector元素失效问题
今天编程遇到了vector中元素失效问题。经查,原因是我对vector中的元素取了引用,当后面vector插入元素时,原有的元素的引用失效了,导致程序崩溃。
如果有朋友遇到vector元素失效的问题,可以检查一下是不是对vector元素取了地址/引用。
很多人操作地址指针的时候很小心,操作引用的时候就大意了。其实引用本质上就是指针常量,所以应当考虑它是否是一个有效的指针。
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> v{1,2,3,4,5,6,7,8,9};
cout << v.capacity() << endl; //输出:9
int & ref = v[3];
cout << ref << endl; //输出:4
int const *p = &v[3];
cout << *p << endl; //输出:4
v.insert(v.begin(), 0); //触发扩容,原有引用和指针失效
cout << ref << endl; //未定义的行为,输出无意义
cout << *p << endl; //未定义的行为,输出无意义
return 0;
}