c++ - 同一个类中的迭代器和 const_iterator 的问题

标签 c++ iterator

我正在写一个“翻译器”类,我需要两个迭代器,一个常量,另一个更正常。 这是有趣的代码区域:

...

iterator begin() {
  iterator i;
  i.puntero=palabras.begin();
  return i;
}
iterator end(){
  iterator i;
  i.puntero=palabras.end();
  return i;
}
...
const_iterator begin() const  {
  const_iterator i;
  i.puntero=palabras.begin();
  return i;
}
const_iterator end() const {
  const_iterator i;
  i.puntero=palabras.end();
  return i;
}
...

还有更多代码,但我认为这并不有趣。

好吧,我需要在 for 循环中使用迭代器,并且在代码失败的这一刻:

  #Work fine
  for(Traductor::iterator it=traductor.begin(); it!=traductor.end(); ++it)
    cout << it->first << endl;

  #Don't work
  for (Traductor::const_iterator it=traductor.begin(); it!=traductor.end(); ++it)
    cout << it->first << endl;

错误是:

 error: conversion from ‘Traductor::iterator’ to non-scalar type ‘Traductor::const_iterator’ requested    for (Traductor::const_iterator it=traductor.begin(); it!=traductor.end(); ++it)

而且我不知道程序如何在第二个循环中使用 const_iterator 并且不要尝试使用正常的。

有什么想法吗?非常感谢。

采用的解决方案:

最后,如果我使用 const traductor,则不必将名称更改为 endbegin 方法,但如果 traductor 不是常数,我需要使用 cendcbegin 方法。

例子:

  #When is constant:
  const Traductor tradConst = traductor;

for (Traductor::const_iterator it=tradConst.begin(); it!=tradConst.end();++it)

  #When isn't, use diferent methods to differentiate:
  //for (Traductor::const_iterator it=traductor.cbegin(); it!=traductor.cend(); ++it)

...

所以,我有:

const_iterator begin() const {...}
const_iterator end() const {...}
iterator begin() {...}
iterator end(){...}

当我使用常量和非常量对象时很有用,当我想在非常量对象中使用常量和非常量迭代器时,我将更改方法的名称:

const_iterator cbegin() const {...}
const_iterator cend() const {...}
iterator begin() {...}
iterator end(){...}

非常感谢你们!

最佳答案

除非 traductorconsttraductor.begin() 返回一个 iterator

您必须提供一个const_iterator 的构造函数,它接受一个iterator(或者在迭代器中添加一个operator const_iterator)。

关于c++ - 同一个类中的迭代器和 const_iterator 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34246206/

相关文章:

c++ - 编译运行 OpenMPI 程序

c++ - delete[] 如何知道 C++ 中的数组长度?

java - 迭代器是如何在 Java 中实现的?

java - 如何将 DynamoDB 扫描结果添加到对象列表?

java - Java枚举和迭代器的区别

c++ - GCC 4.8 在与 libmagic 链接时失败

c++ - 如何制作 Block builder\拖放布局程序?

c++ - MFC 容器 CObList 的 STL 迭代器

c++ - 在 c++14 lambda 表达式中捕获和移动 unique_ptr

c++ - 这里使用迭代器有什么问题