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,您不能修改迭代器,因此您不能将它指向其他位置。但是你可以修改它指向的东西,明白了!谢谢:)