我有一些类的std :: vector,在我的程序中我有一些指向vector中几个项目的指针,问题是当我删除一个项目时,例如第一项,所有指针都是错误的,这是代码示例:
vector<int> numbers;
numbers.push_back(100);
numbers.push_back(200);
numbers.push_back(300);
int *pNum = & numbers[1]; // pNum pointer to 200
numbers.erase(numbers.begin()); // now pNum pointer to 300
我理解为什么会这样,问题是是否有办法解决问题?
答案 0 :(得分:1)
您可以使用基于节点的结构,例如std::list
。这保证了除擦除元素之外的迭代器仍然有效。
缺点是您没有随机访问权限,并且数据不是连续的。
答案 1 :(得分:0)
您可以在向量中保存指针。这样,您就可以将数据与矢量分开,并且您的参考指向实际数据。
vector<int*> numbers;
numbers.push_back(new int(100));
numbers.push_back(new int(200));
numbers.push_back(new int(300));
int * pNum = numbers[1];
// memory leak!!!
numbers.erase( numbers.begin() );
cout << *pNum << endl;
如果你使用c ++ 11,那么放shared_ptr
而不是原始指针是安全的。