Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 什么时候将常量迭代器声明为常量迭代器就足够了?_C++_Class_Iterator_Const Iterator - Fatal编程技术网

C++ 什么时候将常量迭代器声明为常量迭代器就足够了?

C++ 什么时候将常量迭代器声明为常量迭代器就足够了?,c++,class,iterator,const-iterator,C++,Class,Iterator,Const Iterator,例如,我可以用如下方式定义容器: template <typename T> class Example { public: using value_type = T; using iterator = value_type*; using const_iterator = const iterator; //etc }; 模板 课例 { 公众: 使用值_type=T; 使用迭代器=值\类型*; 使用常量迭代器=常量迭代器; //等 }; 但是,使

例如,我可以用如下方式定义容器:

template <typename T>
class Example
{
public:
    using value_type = T;
    using iterator = value_type*;
    using const_iterator = const iterator;
    //etc
};
模板
课例
{
公众:
使用值_type=T;
使用迭代器=值\类型*;
使用常量迭代器=常量迭代器;
//等
};
但是,使用用户定义的迭代器可以这样做吗

template<typename T>
class Example
{
public:
    using value_type = T;
    /*friend?*/ class iterator;
    using const_iterator = const iterator; //is this okay?
    //etc
};
模板
课例
{
公众:
使用值_type=T;
/*friend?*/类迭代器;
使用const_iterator=const iterator;//可以吗?
//等
};

请详细解释。

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

在指针语言中(指针是迭代器),这就是“指向常量的指针”和“常量指针”之间的区别

您甚至可以将常量迭代器设置为常量,或将常量迭代器设置为常量

const int* it const;

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

在指针语言中(指针是迭代器),这就是“指向常量的指针”和“常量指针”之间的区别

您甚至可以将常量迭代器设置为常量,或将常量迭代器设置为常量

const int* it const;

那么,在第二种情况下,这是否意味着常量迭代器只能指向一个特定的位置?@AldenB正确,您不能修改迭代器,因此您不能使它指向其他地方。但是你可以修改它指向的东西,明白了!谢谢:)那么,在第二种情况下,这是否意味着常量迭代器只能指向一个特定位置?@AldenB Correct,您不能修改迭代器,因此您不能将它指向其他位置。但是你可以修改它指向的东西,明白了!谢谢:)