Fun with lambdas - for_each_where
template<class IT, class F, class W> F for_each_where(IT i, IT e, W w, F f) { for (; i != e; ++i) { if (w(*i)) { f(*i); } } return (f); } int main() { std::vector<Point> v; v.push_back(Point(1, 1)); v.push_back(Point(2, 1)); v.push_back(Point(3, 1)); for_each_where(v.begin(), v.end(), [](Point& p) { return p.x > 1; }, // condition [](Point& p) { cout << p.x; }); // code }