我正在使用Visual Studio 2012,所以C++ 11基本上没问题......提升也很好,但我宁愿避免其他的libreries,至少不是widley使用过的.
我想以最优雅的方式创建一个只返回无限序列的前向迭代器.例如,所有自然数的序列.
基本上我想要这个f#代码的C++等效:
let nums =
seq { while true do
yield 1
yield 2
}
Run Code Online (Sandbox Code Playgroud)
上面的代码基本上创建了一个返回[1; 2; 1; 2 ...]的枚举器
我知道我可以通过写一个课来做到这一点,但是所有新的lambdas和所有......都必须有一个更短的方式......
这是你想要的吗:
#include <iostream>
#include <vector>
int main()
{
auto nums = []
{
static unsigned x = 2;
return ( x++ % 2 ) + 1;
};
std::vector< int > v{ nums(), nums(), nums(), nums(), nums() };
for( auto i : v )
{
std::cout << i;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
或者我误解了这个问题?
如果你可以依赖 boost 的话,更简单的事情就是写这样的东西:
int i = 0;
auto gen = boost::make_generator_iterator([=]() mutable { return i++; });
Run Code Online (Sandbox Code Playgroud)
C++14版本:
auto gen = boost::make_generator_iterator([i=0]() mutable { return i++;});
Run Code Online (Sandbox Code Playgroud)
文档在这里。
PS:我不确定它是否可以在没有result_type成员的情况下工作,而 C++03 函子需要成员。