gpt4 book ai didi

c++ - 隐藏结构细节的迭代器适配器

转载 作者:太空宇宙 更新时间:2023-11-04 13:01:13 25 4
gpt4 key购买 nike

假设我们有以下内容:

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()) {
// ...
}

关于c++ - 隐藏结构细节的迭代器适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44148750/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com