2017-05-07 103 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

相关问题