我正在写一个“翻译器”类,我需要两个迭代器,一个常量,另一个更正常。 这是有趣的代码区域:
...
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
,则不必将名称更改为 end
和 begin
方法,但如果 traductor
不是常数,我需要使用 cend
和 cbegin
方法。
例子:
#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(){...}
非常感谢你们!
最佳答案
除非 traductor
是 const
,traductor.begin()
返回一个 iterator
。
您必须提供一个const_iterator
的构造函数,它接受一个iterator
(或者在迭代器中添加一个operator const_iterator
)。
关于c++ - 同一个类中的迭代器和 const_iterator 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34246206/