Используйте 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, вы можете использовать лямбду вместо явного предиката:
std::find_if(x.begin(), x.end(), [varF](int * p) -> bool { return varF == *p; });
Предикат можно превратить в шаблон, если вы хотите использовать его повторно для других подобных ситуаций, когда вам нужно разыскивать и сравнивать. Если это так, то шаблон более элегантен, чем каждый раз печатать лямбды.