【问题标题】:When is it sufficient to declare const_iterator as a const iterator?什么时候将 const_iterator 声明为 const 迭代器就足够了?
【发布时间】:2017-10-05 14:20:03
【问题描述】:

例如,我可以用类似的方式定义一个容器:

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

请提供详细解释。

【问题讨论】:

    标签: c++ class iterator const-iterator


    【解决方案1】:

    const_iteratorconst 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;
    

    【讨论】:

    • 那么,在第二种情况下,这是否意味着 const 迭代器只能指向一个特定位置?
    • @AldenB 正确,你不能修改迭代器,所以你不能让它指向其他地方。但是你可以修改它指向的东西。
    • 知道了!谢谢你:)
    猜你喜欢
    • 2011-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-10
    • 1970-01-01
    • 1970-01-01
    • 2019-01-02
    • 2012-11-04
    相关资源
    最近更新 更多