簡體   English   中英

從指針向量中查找和刪除元素?

[英]Finding and deleting an element from a vector of pointers?

vector<unsigned int> x;
vector<unsigned int>::iterator itr;
unsigned int varF;
...
....

// find and delete an element from a vector.
itr = std::find(x.begin(), x.end(), varF);  // <algorithm>
if (itr != x.end()) 
x.erase(itr);
//or
x.erase(std::remove(x.begin(), x.end(), varF), x.end()); 

我想將此向量轉換為指針向量

vector<unsigned int*> x;

如何將上述功能轉換為指針向量?

使用find_if代替find ,或使用remove_if代替remove ,以使用自定義謂詞:

struct FindIntFromPointer
{
  FindIntFromPointer(int i) : n(i) { }
  bool operator()(int * p) const { return n == *p; }
private:
  int n;
};

std::find_if(x.begin(), x.end(), FindIntFromPointer(varF));
x.erase(std::remove_if(x.begin(), x.end(), FindIntFromPointer(varF)), x.end());

如果您具有C ++ 11,則可以使用lambda代替顯式謂詞:

std::find_if(x.begin(), x.end(), [varF](int * p) -> bool { return varF == *p; });

如果要在需要取消引用和比較的其他類似情況下重用謂詞,則可以將該謂詞轉換為模板。 在這種情況下,模板比每次鍵入lambda更優雅。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM