c++ - 如何在C++中制作无限序列

标签 c++ boost c++11

我使用的是 Visual Studio 2012,所以 C++11 基本没问题... boost 也很好,但我宁愿避免使用其他库,至少不是 widley 使用过的库。

我想以最优雅的方式创建一个返回无限序列的只向前迭代器。例如所有自然数的序列。

基本上我想要这个 f# 代码的 C++ 等价物:

let nums =
    seq { while true do
            yield 1
            yield 2
        }

上面的代码基本上创建了一个返回 [1;2;1;2...] 的枚举器

我知道我可以通过编写一个类来做到这一点,但是对于所有新的 lambda 和所有...,必须有一个更短的方法

最佳答案

这是你想要的吗:

#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;
}

或者我误解了这个问题?

关于c++ - 如何在C++中制作无限序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20264902/

相关文章:

c++ - 可变参数函数在编译时接受相同类型的参数并对其进行迭代

python - 使用 boost::numpy::ndarray 时出现段错误

c++ - std::array 的内联初始化有什么问题?

c++ - 将长整数转换为字符数组的最安全方法是什么

c++ - 从 C++ 中的 std::function 访问模板化 lambda

c++ - 后缀表达式求值

c++ - 使用二进制搜索搜索 vector 的上限

c++ - Xerces-C++ DOM节点行/列号位置

c++ - skipper 在 boost::spirit 中不起作用

c++ - boost::container::string 的内存是否连续?