簡體   English   中英

如何定義和訪問自定義迭代器

[英]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;
}

訪問部分-in est.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;
}

PS:我剛剛保留了迭代器的相關部分-如果需要其他代碼段,請告訴我。

一般來說:

如何定義和訪問自定義迭代器

您應該創建一個容器類和一個迭代器類。 后者應從std :: iterator <>派生。 您必須指定迭代器標記,返回值等。 根據迭代器標記,您應該實現運算符(遞增,遞減等)。 (或者更好的方法是,盡可能實現對數復雜度最高的方法,然后設置最佳的迭代器標簽。)

因此,開始和結束應該返回您的迭代器。 看一下一些stl容器實現,它們並不難讀。

在你的代碼中

ou已經做了typdef T* iterator; 該行為指向T類型的指針起了另一個名字。 為了提高可讀性,並使以后更改變得更容易,您應該返回帶有begin和end的迭代器,因此:

iterator begin();
iterator end();

在上述函數的定義中,您不能為迭代器類型分配值,我建議返回指針(或迭代器),例如在end()中:

return this->unified_array + this->size();

我認為unified_array是一個指針,所以我用了這種方式。

正如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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM