如何定义和访问自定义迭代器

how to define and access custom iterator

本文关键字:访问 自定义 迭代器 定义 何定义      更新时间:2023-10-16

我正在尝试制作一个自定义迭代器,并且在如何定义/声明并最终访问它的语法部分遇到了困难。下面是我的尝试,它导致了以下错误:

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是一个指针,所以我用这种方式。