繁体   English   中英

使用指向向量中项目的指针,并从向量中删除项目

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM