簡體   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