循环使用迭代器语法VS Loop with generators语法

时间:2017-04-23 10:53:47

标签: c++ loops iterator generator

我注意到生成器函数返回一个具有.begin()和.end()方法的对象。所以我尝试使用迭代器的经典语法:

for (auto it = x.begin(), end = x.end(); it != end; ++it) { /**/ }

但是我注意到它不起作用......这是我的代码:

#include <experimental\generator>
using namespace std;

experimental::generator<int> test() {
    co_yield 0;
}

int main() {
    /*/
    // THIS LOOP MAKES PROGRAM CRASH
    for (auto it = test().begin(), end = test().end(); it != end; ++it)
        int a = *it;
    /*/
    // THIS LOOP WORKS
    for (auto i : test())
        int a = i;
    /**/

    return 0;
}

有关于生成器循环和迭代器语法的一些我不知道的事情吗?有没有办法在生成器中使用迭代器语法?

谢谢你的回答!

1 个答案:

答案 0 :(得分:1)

正如Caramiriel和Some Programer Dude所注意到的那样,我正在实施两次发电机。以下循环有效:

auto gen = test();
for (auto it = gen.begin(), end = gen.end(); it != end; ++it)
    int a = *it;