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;
如何将上述功能转换为指针向量?
答案 0 :(得分:8)
使用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; });
如果您希望将谓词重新用于需要取消引用和比较的其他类似情况,则谓词可以转换为模板。如果是这种情况,模板比每次输入lambdas更优雅。