假设我们有以下内容:
struct MyClass {
typedef vector<MyValue> InnerVector;
const InnerVector & get() { ... }
};
vector<MyClass> classes;
有没有办法在
classes
上提供“扁平化”的迭代器?那就是将classes
视为其InnerVector
的某些列表。迭代器的每个取消引用都应返回一个InnerVector
。类似于以下内容:auto all_inner_vectors = magic_iterator(classes);
for (auto inner_vector : all_inner_vectors) {
...
}
看来,boost迭代器适配器在这里可能会派上用场。但是我不知道哪种适配器适合此目的。
最佳答案
使用range-v3,您可以
for (MyValue& value : myClass.get() | ranges::view::join) {
// ...
}
或者您可以将您的班级更改为直接使用join:
struct MyClass {
using InnerVector = vector<MyValue>;
// Return a range of MyValue.
auto get() { return InnerVector | ranges::view::join; }
};
然后
for (MyValue& value : myClass.get()) {
// ...
}