由于C++ 11引入了基于范围的for循环(基于范围的c ++ 11),在整数范围内表达循环的最佳方法是什么?
代替
for (int i=0; i<n; ++i)
Run Code Online (Sandbox Code Playgroud)
我想写点类似的东西
for (int i : range(0,n))
Run Code Online (Sandbox Code Playgroud)
新标准是否支持这种类型的任何东西?
更新:本文介绍如何在C++ 11中实现范围生成器:C++中的Generator
ixS*_*Sci 31
虽然你不能用纯C++(使用当前的C++标准库功能)来做到这一点,你可以在boost的帮助下做到这一点:
#include <boost/range/irange.hpp>
#include <iostream>
int main(int argc, char **argv)
{
for (auto i : boost::irange(1, 10))
std::cout << i << "\n";
}
Run Code Online (Sandbox Code Playgroud)
此外,还Boost.Range包含一些有趣的范围,您可以在使用新for循环时发现它们非常有用.例如,使用Boost.Range可以进行反向Boost.Range循环.
BЈо*_*вић 21
最好的方法仍然是:
for (int i=0; i<n; ++i)
Run Code Online (Sandbox Code Playgroud)
我想你可以做到这一点,但我不会这么称呼它:
#include <iostream>
int main()
{
for ( auto i : { 1,2,3,4,5 } )
{
std::cout<<i<<std::endl;
}
}
Run Code Online (Sandbox Code Playgroud)
随着C++20我们将有范围。您可以通过从其作者github上下载作者Eric Niebler的最新稳定版本来尝试使用它们,或转到Wandbox。您感兴趣的是ranges::views::iota,这使该代码合法:
#include <range/v3/all.hpp>
#include <iostream>
int main() {
using namespace ranges;
for (int i : views::iota(1, 10)) {
std::cout << i << ' ';
}
}
Run Code Online (Sandbox Code Playgroud)
这种方法的最大优点是views是惰性的。这意味着,即使views::iota代表从1到10排他的int范围,在某一点上也只有不超过该范围的一个。这些元素是按需生成的。
| 归档时间: |
|
| 查看次数: |
23310 次 |
| 最近记录: |