【发布时间】:2017-09-20 01:55:25
【问题描述】:
我注意到生成器函数返回一个具有 .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;
}
关于生成器循环和迭代器语法有什么我不知道的吗?有没有办法在生成器中使用迭代器语法?
感谢您的回答!
【问题讨论】:
-
您多次致电
test,因此您每次都会得到一个新的生成器。 (for (auto obj = test(), auto it = obj.begin(), end = obj.end(); it != end; ++it)) -
我不了解生成器,每次调用
test是否返回相同的生成器或不同的生成器对象?如果它返回不同的对象(我想我会这样做),那么它们的begin和end迭代器将不相关。
标签: c++ loops iterator generator