Ald*_*enB 1 c++ iterator class const-iterator
例如,我可以用类似于以下的方式定义容器:
template <typename T>
class Example
{
public:
using value_type = T;
using iterator = value_type*;
using const_iterator = const iterator;
//etc
};
Run Code Online (Sandbox Code Playgroud)
但是,可以使用用户定义的迭代器来执行此操作吗?
template<typename T>
class Example
{
public:
using value_type = T;
/*friend?*/ class iterator;
using const_iterator = const iterator; //is this okay?
//etc
};
Run Code Online (Sandbox Code Playgroud)
详细的解释将不胜感激。
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
Run Code Online (Sandbox Code Playgroud)
您甚至可以将 const 迭代器设置为 const,或者const const_iterator:
const int* it const;
Run Code Online (Sandbox Code Playgroud)