现在如何在 C++11 中编写 for 循环?
for (int i{0}; i < 10; ++i) {}
我现在就是这样做的。注意两件事:
1. int i{0} instead of int i = 0
2. prefix increment
为什么我不应该使用 {} 进行初始化?
最佳答案
编写 for 循环的方法比您的理念中想到的要多。
有
for( auto i = 0; i < 10; ++i ) {}
无缘无故地使用了一个额外的字符。有:
for( int i{}; i < 10; ++i ) {}
这是非常波浪形的。
有经典的:
for( int i = 0; i < 10; ++i ) {}
同样有效。我喜欢的有趣方式是:
for( const int i : boost::counting_range(0, 10) ) {}
或一些自制版本的boost::counting_range(0,10)
.使它有用的一个可爱的方法是写:
template<typename C>
boost::counting_range<std::size_t> indexes( C const& c ) {
return {0, c.size()};
}
template<typename T, std::size_t N>
boost::counting_range<std::size_t> indexes( T(&)[N] ) {
return {0, N};
}
它允许您通过以下方式迭代容器的索引:
for( const auto i : indexes( container ) ) {
container[i] = i+1;
}
而且我发现它非常漂亮。
但是,您通常不需要索引,除非您对多个随机访问容器进行并行迭代。一系列 boost zip 迭代器可以让您在多个容器(随机或非随机)上进行并行迭代,只要您完成处理结束条件问题的工作即可。
有趣的是,你可以破解 indexes
无法在非随机访问容器上工作(通过测试 [std::declval<std::size_t>()]
来查看它是否是一个有效的表达式),但在关联容器上迭代键。非常像 python。
关于c++ - 现在如何在 C++11 中编写 for 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21534850/