2017-05-07 79 views
1

例如,我可以定義在某種程度上類似於一個容器:什麼時候將const_iterator聲明爲一個常量迭代器?

template <typename T> 
class Example 
{ 
public: 
    using value_type = T; 
    using iterator = value_type*; 
    using const_iterator = const iterator; 
    //etc 
}; 

然而,是不是好與用戶定義的迭代器做到這一點?

template<typename T> 
class Example 
{ 
public: 
    using value_type = T; 
    /*friend?*/ class iterator; 
    using const_iterator = const iterator; //is this okay? 
    //etc 
}; 

詳細的解釋將被讚賞。

回答

4

A const_iteratorconst iterator代表兩個不同的事情。在每種情況下,const都適用於不同的東西:對象在第一種情況下由迭代器指向,迭代器在第二種情況下指向。因此,使用另一個永遠不會「足夠」。在指針說話(指針是迭代器)中,這將是「指向常量」和「常量指針」之間的區別。

const int* it; // pointer to const int: a const_iterator 
int* it const; // const pointer to int: a const iterator 

你甚至可以有常量迭代器爲const,或const const_iterator

const int* it const; 
+0

所以,在第二種情況下,這是否意味着常量迭代器只能指向一個特定的位置? – AldenB

+0

@AldenB正確,你不能修改迭代器,所以你不能把它指向別的地方。但是你可以修改它指向的東西。 – juanchopanza

+0

Got it!謝謝 :) – AldenB

相關問題