既然C++11引入了基于范围的for循环(range-based for in c++11),那么表示一系列整数上的循环的最简洁的方式是什么?
而不是
for (int i=0; i<n; ++i)
我想写这样的东西
for (int i : range(0,n))
新标准支持这类东西吗?
更新:本文描述如何在C++11:Generator in C++中实现范围生成器
发布于 2013-02-26 20:36:09
虽然它不是由C++11提供的,但您可以编写自己的视图或使用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";
}
此外,结合新的for
循环,Boost.Range
包含一些更有趣的范围,您会发现这些范围非常有用。例如,您可以获得一个reversed view。
发布于 2013-02-26 20:20:26
最简洁的方法仍然是:
for (int i=0; i<n; ++i)
我猜你可以做到这一点,但我不认为这是巧妙的:
#include <iostream>
int main()
{
for ( auto i : { 1,2,3,4,5 } )
{
std::cout<<i<<std::endl;
}
}
发布于 2019-08-30 04:51:35
有了C++20
,我们就有了范围。你可以从它的作者Eric Niebler那里下载最新的稳定版本,从his github下载,或者访问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 << ' ';
}
}
这种方法的伟大之处在于view
是懒惰的。这意味着,即使views::iota
表示从1
到10
exclusive的范围,但在某一点上,该范围中只有一个int
存在。元素是按需生成的。
https://stackoverflow.com/questions/15088900
复制相似问题