1

例如,我可以以类似于以下方式定义容器:

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

1 回答 1

4

Aconst_iterator和 aconst iterator代表两个不同的东西。在每种情况下,都const适用于不同的东西:第一种情况下迭代器“指向”的对象,第二种情况下迭代器本身。因此,将一个用于另一个永远是“不够的”。

用指针说话(指针是迭代器),这将是“指向 const 的指针”和“const 指针”之间的区别。

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

您甚至可以将 const 迭代器用于 const,或者const const_iterator

const int* it const;
于 2017-05-07T15:19:51.260 回答