问题描述:
如果创建了指向vector中元素的指针,使用时发生访问冲突或者得到错误的数据,
例如:
std::vector<int> a;
a.push_back(1);
a.push_back(2);
a.push_back(3); //此时a.capacity()==4
int *p = &a[1];
cout << *p << endl; //此时p指向a中第二个元素,即2
a.push_back(4); //到达最大容量
a.push_back(5); //重新分配空间,并把旧数据搬到新的位置,此时a.capacity()==8
cout<< *p << endl; //此时p仍然指向旧的存储空间,但实际的数据存储在新分配的空间内,导致与理想的数据不符或者发生访问冲突。
预防此类BUG的方法
- 不要创建指向vector内元素的指针。
- 使用
reserve(capacity)
提前分配足够大的容量,防止vector自动扩容。