[英]Use pointers to items in a vector, and deleting items from the vector
我有一些类的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
我了解为什么会发生,问题是是否有解决问题的方法?
您可以使用基于节点的结构,例如std::list
。 这保证了除被擦除元素之外的其他迭代器仍然有效。
缺点是您没有随机访问权限,并且数据不是连续的。
您可以将指针保存在向量中。 这样,您就可以将数据与向量分离,并且您的参考点将指向真实数据。
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
而不是原始指针。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.