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());
Run Code Online (Sandbox Code Playgroud)
我想将此向量转换为指针向量
vector<unsigned int*> x;
Run Code Online (Sandbox Code Playgroud)
如何将上述功能转换为指针向量?
使用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());
Run Code Online (Sandbox Code Playgroud)
如果你有C++ 11,你可以使用lambda而不是显式谓词:
std::find_if(x.begin(), x.end(), [varF](int * p) -> bool { return varF == *p; });
Run Code Online (Sandbox Code Playgroud)
如果您希望将谓词重新用于需要解除引用和比较的其他类似情况,则谓词可以转换为模板.如果是这种情况,模板比每次输入lambdas更优雅.