如何在C++中重新实现包含指针的 STL 容器的类的迭代器
How to reimplement iterator of a class that contains STL container of pointers in C++
我有一个类,其中包含指向另一个类的指针向量:
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++类的 C 指针的对齐问题
- 包含指向其他结构的指针向量的结构
- 删除包含包含动态对象的 STL 容器的智能指针
- C++两个对象,其中包含指向同一数组不同部分的指针
- 编译包含指向模板函数的指针的初始值设定项列表时,gcc 出错,但 clang 不出错
- 为什么 Mac 上不需要包含智能指针?
- 指针数据类型变量如何包含对象?
- cppyy 继承包含智能指针的类
- 为什么 Wild 指针包含零地址而不是 garabge 地址?
- 为包含原始指针的对象C++智能指针
- 遍历包含 c++ 中指针的向量
- 如何在C++中重新实现包含指针的 STL 容器的类的迭代器
- C++对包含新指针的向量的分配
- 为什么此指针包含存储在堆上的地址
- 为什么指针包含一些垃圾
- 指向结构的指针包含指针
- 指针包含什么类型的数据
- 为什么变量指针包含相同数据类型的地址?