gpt4 book ai didi

c++ - 如何在类中使用重载的 const_iterator?

转载 作者:行者123 更新时间:2023-11-27 23:41:58 24 4
gpt4 key购买 nike

我正在用 C++ 做一个大学项目,其目的是学习如何使用不同的 STL 容器及其迭代器。

在我的程序中,我有一个带有集合的类:

class ConjuntoDeLetras{
private:
set<Letra> letras;

public:
ConjuntoDeLetras();
···
};

在类内部,我有两个嵌套类,iterator 和 const_iterator。 (我不知道这样制作类迭代器是不是最好的方式,但是老师告诉我们需要这样做):

class iterator{
private:
set<Letra>::iterator it;
public:
iterator();

Letra operator*();

ConjuntoDeLetras::iterator& operator++();

ConjuntoDeLetras::iterator& operator+=(int num);

bool operator==(const ConjuntoDeLetras::iterator &i);

bool operator!=(const ConjuntoDeLetras::iterator &i);

friend class ConjuntoDeLetras;
};

class const_iterator{
private:
set<Letra>::const_iterator it;
public:
const_iterator();

Letra operator*();

ConjuntoDeLetras::const_iterator& operator++();

ConjuntoDeLetras::const_iterator& operator+=(int num);

bool operator==(const ConjuntoDeLetras::const_iterator &i);

bool operator!=(const ConjuntoDeLetras::const_iterator &i);

friend class ConjuntoDeLetras;
};

两种迭代器类方法都运行良好。在 ConjuntoDeLetras 类中,我们有 begin 和 end 方法:

ConjuntoDeLetras::iterator begin();
ConjuntoDeLetras::const_iterator begin() const;
ConjuntoDeLetras::iterator end();
ConjuntoDeLetras::const_iterator end() const;

问题就在这里。当我要使用 const_iterator 时,我们遇到了问题:

ConjuntoDeLetras::const_iterator itL;

for(itL=L.begin(); itL!=L.end(); ++itL){
CantidadLetras aux;
aux.frecuenciaAbsoluta = 0;
aux.frecuenciaRelativa = 0;
aux.letra = (*itL).getLetra();

salida.push_back(aux);
}

当我执行这段代码时,编译器说我没有 operator= for const_iterator to iterator。我知道问题的原因,这是因为对象 L 不是 const 变量并使用普通迭代器 begin()end()。我考虑过删除函数的最终 const 但我不能仅使用返回类型重载函数。我不知道什么是最好的解决方案。这是编译器错误:

error: no match for ‘operator=’ (operand types are ‘ConjuntoDeLetras::const_iterator’ and ‘ConjuntoDeLetras::iterator’)
for(itL=L.begin(); itL!=L.end(); ++itL){
^

end() 也有同样的错误。

最佳答案

您缺少其他 ++ 运算符和成为迭代器所需的 typedef。

另外,您需要=default copy/move/assignments。

最后,您需要一个从 iteratorconst_iterator 的转换构造函数。

可选择添加两个 const_iterator::operator=(iterator) 重载(复制赋值和移动赋值),加上 const_iterator::operator==(iterator const&)iterator==const_iterator 同理。

关于c++ - 如何在类中使用重载的 const_iterator?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54014963/

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