基于指针容器循环的范围内的值语义
Value semantics in range based for loop of pointer container
,所以我想为指针写一个容器,以隐藏它是一个指针容器的事实。对于我的AddMember
函数,这是一种有效的作用。
#include <iostream>
#include <vector>
template<typename T>
class MyVector : public std::vector<T*>
{
public:
void AddMember(T& newMember)
{
this->push_back(&newMember);
}
};
int main()
{
int a, b;
MyVector<int> vec;
vec.AddMember(a);
vec.AddMember(b);
for (auto& member : vec)
{
std::cout << "Address:" << member << " Value: " << *member << std::endl;
}
return 0;
}
现在,是否有可能以基于范围的循环获得值语义的方式实现begin()
和end()
?IE。只有member
为您提供价值吗?我不想使用Boost PTR容器,因为这将是一个非拥有容器。
现在,是否可以以基于范围的循环获得值语义的方式来实现begin()和end()?
是。就像其他所有容器一样,您需要提供返回迭代器的begin
和end
。
您不能直接使用std::vector<T*>::iterator
,因为它具有错误的值类型,但是您可以在其顶部实现迭代器。这种包装器迭代器称为迭代器适配器。
幸运的是,Boost已经包含了迭代器适配器的库,因此您无需从头开始实现。您可能需要特别看boost::indirect_iterator
。
ps。避免公开继承标准容器。他们没有虚拟破坏者,因此很容易错误地编写具有未定义行为的程序。
相关文章:
- 并行用于C++17中数组索引范围内的循环
- 如何仅使用 While 循环在给定范围内找到可被 7 整除的计数整数
- C++ 中的类之间的数据重新循环 - 错误:'<class name>'未在此范围内声明
- 同一范围内矢量的两个独立"for"循环,仅打印第一个循环
- 在基于范围的循环范围内的双/整数使用和数据缩小
- 在initializer_list范围内进行循环
- 自动和范围内 for 循环 C++11 不起作用
- 基于指针容器循环的范围内的值语义
- 以下是基于循环的范围内的幕后列表
- 基于循环的C 范围内的Ampers和
- 循环范围内的初始值设定项列表
- 循环直到整数输入在所需范围内无法处理非数字字符输入
- 我们可以擦除c++11中基于循环的范围内的项目吗
- 使用对指针的引用作为循环C++11范围内的序列
- 给定范围内的完美平方:循环执行异常
- 从矢量中删除项目,而在 C++11 范围内'for'循环?
- 通过引用传递向量,并在基于for循环的范围内更改其值
- 如何在'while(getline(...))'循环中让'string line'与'getline(in,line)'处于同一范围内?
- 循环计数某个范围内的事件编号时总是返回1
- 使用 while 循环打印两个用户输入值范围内的数字