【发布时间】:2011-12-20 14:30:12
【问题描述】:
所以我在玩一些 C++11 特性,我很好奇为什么 std::for_each 是有益的。做一个 for 循环是不是更容易看起来更干净,还是因为我已经习惯了这样做?
#include <iostream>
#include <tuple>
#include <vector>
#include <algorithm>
typedef std::tuple<int, int> pow_tuple;
pow_tuple pow(int x)
{
return std::make_tuple(x, x*x);
}
void print_values(pow_tuple values)
{
std::cout << std::get<0>(values) << "\t" << std::get<1>(values) << std::endl;
}
int main(int argc, char** argv)
{
std::vector<int> numbers;
for (int i=1; i < 10; i++)
numbers.push_back(i);
std::for_each(numbers.begin(), numbers.end(),
[](int x) { print_values(pow(x)); }
);
std::cout << "Using auto keyword:" << std::endl;
auto values = pow(20);
print_values(values);
return 0;
}
【问题讨论】:
-
foreach 循环的要点是看起来更整洁,并且比 for(;;) 循环更易于人类解释。不过,我个人偏向于常规的 for 循环
-
查看 c++11 功能我会在循环中使用 auto 关键字和 begin(numbers)/end(numbers)。使其更兼容不同类型的数据类型。