gpt4 book ai didi

c++ - `const_iterator` 真的需要与 `iterator` 属于不同的类吗?

转载 作者:搜寻专家 更新时间:2023-10-31 00:54:37 25 4
gpt4 key购买 nike

假设我定义了某种容器A:

struct A
{
iterator begin(){ return iterator(this,0); }
const iterator cbegin() const { return iterator(this, last());}
//...
};

假设现在我要声明迭代器(A 的一部分):

struct A::iterator
{
iterator ( A* ptr, size_t idx){};
//...
};

我会这样使用:

const A a;
A::iterator it = a.cbegin();

那是行不通的,因为传递给 iterator 的构造函数的指针是非常量的。

理想的解决方案类似于返回常量对象的特定构造函数:

const A::iterator( const StringUtfInterface *p, size_t s); //Not valid

这(显然)在 C++ 中无效。我想知道解决这个问题的方法是什么?

我真的需要声明/定义一个新的 const_iterator 类吗? const 关键字不够用?


相关问题(但不一样):

最佳答案

const keyword is not enough?

实际上,const 关键字太多了:它迫使你写

const A::iterator it = a.cbegin();

这会阻止您以后使用 ++it

你需要提供两个独立的类,但这并不意味着你必须将代码写两次。您可以按照以下方式构建迭代器的实现,即执行所有工作的公共(public)类嵌入到常量和非常量迭代器实现中,这将嵌入式实现的相关方法公开给调用者。

关于c++ - `const_iterator` 真的需要与 `iterator` 属于不同的类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44882363/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com