Поскольку вы пометили вопрос с помощью C++11
, вы можете использовать лямбда-выражения как:
std::for_each(collection.begin(), collection.end(), [](int a)
{
bar(a);
beer(a);
});
Напомню, что в C ++ 11 есть std::begin
и std::end
в качестве свободных функций, которые должныбыть предпочтительным по сравнению с функциями-членами:
std::for_each(std::begin(collection), std::end(collection), [](int a)
{
bar(a);
beer(a);
});
Обоснование того, почему свободные функции следует отдавать предпочтение, заключается в том, что теперь, если, например, вы измените тип коллекции на простой массив (скажем, int collection[100]
)тогда приведенный выше код будет работать нормально, не меняя ни одного символа.С новым стандартом C ++ свободные функции будут использоваться более равномерно, чем функции-члены.
Или вы можете использовать основанный на диапазоне * цикл for
как:
for(int a : collection)
{
bar(a);
beer(a);
}
Ах!Это выглядит даже лучше.Аккуратный и чистый, без begin
и end
вообще.