`const_iterator` 真的需要是与 `iterator` 不同的类吗?

2024-02-10

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

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

假设现在我想声明iterator(A的一部分):

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

我会这样使用:

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

这不起作用,因为指针传递给了构造函数iterator是非常量。

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

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

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

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


相关问题(但不相同):

  • 为什么C++没有const构造函数? https://stackoverflow.com/questions/6936124/why-does-c-not-have-a-const-constructor
  • 获取 const 引用的迭代器 https://stackoverflow.com/questions/35919822/get-iterator-for-const-reference

const关键词还不够?

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

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

这会阻止你使用++it稍后的。

您需要提供两个单独的类,但这并不意味着您必须编写两次代码。您可以通过以下方式构造迭代器的实现:将完成所有工作的公共类嵌入到常量和非常量迭代器实现中,从而向调用者公开嵌入式实现的相关方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

`const_iterator` 真的需要是与 `iterator` 不同的类吗? 的相关文章

随机推荐

  • powershell 文件名唯一部分列表

    我有多台机器将文件上传到一个 FTP 目录 文件名的第一部分是机器 其余部分是时间戳 例如AAAAA 20130312 125113 现在我想获取已上传到此目录的所有唯一计算机的排序列表 我设法将丢失的所有 filenames substr
  • 使用 adb 向 Android 手机发出捏合/捏合命令

    到目前为止 我可以使用 adb 命令点击 滑动 解锁 安装 卸载和启动应用程序 但无法找到如何使用 adb 命令执行放大 缩小 我已经获得了捏入 捏出的坐标 但不知道如何使用终端的 adb 命令来触发它们 例如 我们有命令 gt adb s
  • 如何为本地Rails项目设置Postgres数据库?

    我最近买了一台新机器 现在想在 Github 上处理我的项目 我很好奇如何在本地计算机上正确设置 Postgres 数据库 我有postgresql pgadmin3 and libpq dev安装在 Ubuntu 12 04 上 我拉下项
  • 大量 iTunes Connect 抓取

    我正在研究从 iTunes Connect 网站获取销售报告和其他数据的不同选项 由于Apple不提供API 所以我找到的所有解决方案都是基于抓取页面 由于我需要我们提供的产品的信息 因此我不太乐意将所有 iTunes 帐户提供给第三方服务
  • Spring Boot 多个端口?

    如何让 Spring Boot Web 应用程序在多个端口上运行 例如8080和80我怎样才能做到这一点 应用程序属性 server port 8080 80 您可以添加侦听器 而不是运行多个应用程序 例如 如果您使用 undertow C
  • Firebase“抛出新错误('提供的服务帐户无效');”错误信息

    我注意到 Firebase 最近发生了变化 我正在构建一个需要 firebase 的 node js 应用程序 以前这就足够了 var Firebase require firebase var firebaseRef new Fireba
  • 从 create-react-app 公共文件夹读取 JSON 文件 [重复]

    这个问题在这里已经有答案了 我有一个 ipAddress json 文件 其中包含以下内容 ipAddress 11 111 111 111 在公共文件夹中 我将该 ipAddress json 文件放入 ipAddress 文件夹中 因此
  • 按日期对 pandas df 中的组进行排序和排名

    从以下类型的数据框中 我希望能够对id日期字段 df pd DataFrame id 1 1 2 3 3 4 5 6 6 6 7 7 value 01 4 2 3 11 21 4 01 3 5 8 9 date 10 01 2017 15
  • 代码挑战:Bash 提示路径缩短器

    我为 bash 实现了一个提示路径缩短器 将其包含在 PS1 环境变量中 它将工作目录缩短为更紧凑但仍具有描述性的目录 我很好奇可能存在什么其他想法 这是挑战 创建 bash 函数 dir chomp可以像这样包含到 PS1 中 插入换行符
  • 如何使用 for 循环迭代子级

    我想迭代 jQuery 的所有子级 children 返回值 像这样 var childs element children for var i 1 i lt childs length 1 i childs foo 我必须在第 3 行写什
  • 创建新的 OneNote 笔记本 错误请求

    我想使用 Graph api 创建一个新的 OneNote 笔记本 我正在关注这份文件 使用 Graph Explorer 我无损地创建了它 但我想从不同的环境中实现相同的目标 例如 Postman 我通过 client credentia
  • 更改 Derby 数据库密码

    我已经在 Glassfish Netbeans 中设置了 Derby DB 密码 我还选中了记住我复选框 现在我无法再更改密码了 要更改密码您只需执行 call SYSCS UTIL SYSCS SET DATABASE PROPERTY
  • CakePHP 3 和表单验证错误

    我使用 cakePHP 3 并且我有一个使用 Form gt input 的登录表单 如果我故意犯了一个错误 这个错误不会出现在表单字段下 它没有出现在任何地方 我的代码是这样的 newUser this gt Users gt newEn
  • 如何将 NULL 值更改为空字符串?

    我有一个 SSIS 包 它将数据从可为空的列复制到同一列不可为空的表 使源不可为空涉及繁文缛节 因此现在我需要一种方法将空值更改为空字符串 我从 ADO Net 源获取数据 而不是从查询中获取数据 在查询中我可以添加空值检查 如果需要 我可
  • 如何创建一个播放 mp3 google tts 的按钮

    我是新来的 但我希望你能帮助我 我正在尝试创建一个按钮来播放谷歌生成的文本到语音 mp3 我正在创建一个翻译器 所以 我想要做的是像谷歌翻译这样的事情 以某种方式 我尝试过使用 javascript 和 actionscript 但无法使其
  • 使用 pip 安装时出错

    尝试卸载用 pip 安装的软件包 我卸载了一些 现在 pip 不起作用 我尝试安装熊猫 sudo pip install pandas 这是错误 Requirement already satisfied use upgrade to up
  • 同步服务运行后刷新 FragmentActivity 中的片段

    有没有人有任何优雅的解决方案来刷新Views in Fragments in a FragmentActivity s ViewPager同步后Service from a SyncAdapter runs 我试过打电话notifyData
  • IndexAxisValueFormatter 未按预期工作

    我正在使用MPAndroid图表 https github com PhilJay MPAndroidChart创建条形图 我的配置
  • Magento:如何获取属于属性集的属性?

    有了属性集 如何获取它包含的属性列表 或者更好的是 仅获取不属于默认属性集的自定义属性 属性集本身可以通过多种方式获取 例如 entityTypeId Mage getModel eav entity gt setType catalog
  • `const_iterator` 真的需要是与 `iterator` 不同的类吗?

    假设我定义了某种容器A struct A iterator begin return iterator this 0 const iterator cbegin const return iterator this last 假设现在我想声