繁体   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