[英]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.