我在 SO 上看过很多关于如何定义自定义迭代器的帖子,但似乎没有什么能完全回答我的问题,即......
如何创建隐藏嵌套 for 循环的迭代器?
例如,我有一个类Foo,Foo里面是一个Bar,Bar里面是一个字符串。我可以写
for (const Foo& foo : foo_set)
for (const Bar& bar : foo.bar_set)
if (bar.my_string != "baz")
cout << bar.my_string << endl;
但我希望能够做类似的事情:
for (const string& good : foo_set)
cout << good << endl;
我该如何做这样的事情?
最佳答案
已经有proposals以及关于segmented iterators的讨论,但没有一个真正将其纳入 C++ 标准(无论如何)。
就目前而言,处理它的最干净的方法(无论如何,在我看来)是作为一个项目的集合,每个项目本身就是一个集合:
std::ostream &operator<<(std::ostream &os, bar const &b) {
return os << b.my_string;
}
std::ostream &operator<<(std::ostream &os, foo const &f) {
std::remove_copy_if(f.begin(), f.end(),
std::ostream_iterator<bar>(os, "\n"),
[](bar const &b) { return b.my_string != "baz"; });
return os;
}
std::copy(foo_set.begin(), foo_set.end(),
std::ostream_iterator<foo>(std::cout, "\n"));
或者,如果你坚持的话:
for (auto s : foo_set)
std::cout << s << "\n";
关于c++ - 如何在 C++ 中定义自定义迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13482468/