如何定义和访问自定义迭代器
how to define and access custom iterator
我正在尝试制作一个自定义迭代器,并且在如何定义/声明并最终访问它的语法部分遇到了困难。下面是我的尝试,它导致了以下错误:
Error C2440 'initializing': cannot convert from 'int' to 'int *'
若有人能给我指出定义/声明它的正确方法,那个就太好了,因为我相信我的访问方法是标准的。
申报
template <typename T>
class ddeque
{
public:
typedef T* iterator;
T& begin();
T& end();
}
定义
template<typename T>
T& ddeque<T>::begin()
{
iterator = &(this->unified_array());
return iterator;
}
template<typename T>
T& ddeque<T>::end()
{
iterator = &(this->unified_array + this->size());
return iterator;
}
接入部分--在test.cpp文件中
//比较自定义模板和标准模板的值
typename ddeque<T>::iterator itt = a.begin();
typename deque<T>::iterator ittg = g.begin();
while ((itt != a.end()) && (ittg != g.end()))
{
if (display)
{
cout << *itt << " ";
}
++itt;
++ittg;
}
p.S:我刚刚保留了迭代器的相关部分-如果需要额外的代码片段,请告诉我
正如SO成员Андрей
声明:
template <typename T>
class ddeque
{
public:
typedef T* iterator;
iterator begin();
iterator end();
}
定义样板T*ddeque::begin(){迭代器=&(this->unified_array());返回迭代器;}
template<typename T>
T* ddeque<T>::end()
{
iterator = &(this->unified_array + this->size());
return iterator;
}
一般情况下:
如何定义和访问自定义迭代器
您应该创建一个contaner类和一个迭代器类。后者应该派生自std::迭代器<>。您必须指定迭代器标记、返回值等。根据迭代器标记,您应该实现运算符(递增、递减等)
所以begin和end应该返回迭代器。看看一些stl容器实现,它们并不难阅读。
在您的代码中
你做了一个typdef T* iterator;
。这一行为指向T类型的指针创建了另一个名称。为了可读性,并使以后更容易更改,您应该返回带有开始和结束的迭代器,所以:
iterator begin();
iterator end();
在上面函数的定义中,不能为迭代器类型赋值,我建议返回指针(或迭代器),例如在end()中:
return this->unified_array + this->size();
我认为unified_array
是一个指针,所以我用这种方式。
相关文章:
- 如何正确实现和访问运算符的各种自定义枚举器
- 在C++中循环访问自定义结构列表的小问题
- 循环访问自定义双链表
- 威纳派读取自定义文件或文件夹的所有访问权限
- 通过Overloading Operator []访问自定义数组包装器中的元素
- 访问自定义OP的输入值时的segmenation故障
- 如何从回调方法访问自定义类成员
- GPUMAT-访问自定义内核中的2个通道浮点数据
- 具有各种访问方法的自定义数据结构
- Qt/VTK:访问自定义交互器类中的函数
- 使用自定义模式进行序列化,并使用Boost进行随机访问
- Windows安装程序,在C++中访问自定义操作中的自定义属性
- 访问自定义wxPanel中的子项
- 循环访问自定义分类对象的列表
- 循环访问自定义类的列表
- 无需重新启动即可访问自定义环境变量(使用C++)
- 如何定义和访问自定义迭代器
- 当单击视图中的项时,从另一个小部件访问自定义模型数据
- FBX SDK访问自定义属性
- 分段错误,访问自定义的 gsoap 标头