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