从指针向量中查找和删除元素?

时间:2011-10-09 21:55:18

标签: c++ vector

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;

如何将上述功能转换为指针向量?

1 个答案:

答案 0 :(得分:8)

使用find_if代替findremove_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; });

如果您希望将谓词重新用于需要取消引用和比较的其他类似情况,则谓词可以转换为模板。如果是这种情况,模板比每次输入lambdas更优雅。