gpt4 book ai didi

c++ - 如何在C++中实现包含指针的STL容器的类的迭代器

转载 作者:行者123 更新时间:2023-12-01 14:54:18 26 4
gpt4 key购买 nike

我有一个包含指向另一个类的指针 vector 的类:

class B {};

class A {
std::vector<B*> data_;
};

我想为用户提供一个迭代器。我考虑过在类中使用 typedef std::vector<B*>::iterator iterator,但是随之而来的问题是 iterator::operator*()返回 B*,我希望它向用户完全隐藏内部表示。

我没有找到重新实现 operator*的方法,在我看来,也许唯一的解决方案是使用对STL迭代器的内部引用来嵌套一个类:
class B {};

class A {
std::vector<B*> data_;
class iterator {
std::vector<B*>::iterator it;
B& operator*();
...
};
};

但是我想知道,还有其他更优雅的方式来完成此工作吗?我的方法意味着重新实现所有成员函数,只是为了在 std::vector<>::iterator中调用等效的成员函数,除了已经提到的运算符。

谢谢!

最佳答案

使用C++ 20范围,您可以执行以下操作:

auto bView() /*const*/ {
return data_
| std::views::filter([](auto* p){ return p != nullptr; })
| std::views::transform([](auto* p) -> decltype(auto) { return *p; });
}

关于c++ - 如何在C++中实现包含指针的STL容器的类的迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59100841/

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