C++错误:const_iterator转换为iterator

6
我将尝试使用以下代码遍历 map 对象:

for(map<int, vector>::iterator table_iter = table.being(); table_iter != table.end(); table_iter++)
{
    ...
}

我一直收到错误提示:

请求将const_iterator转换为非标量类型iterator

我似乎无法确定迭代器是const还是非const,也不知道如何处理这个问题。


哪一行出现了错误? - Jon
我发布的那一行代码;for 循环的那一行。 - Patrick Perini
4个回答

9
请使用由map::begin返回的map<int, vector>::const_iterator

1
我注意到有时使用迭代器没有问题,而其他情况下需要使用const_iterator。这似乎与作用域有关,因为当我在lambda [=]中捕获了一个向量并运行.begin()函数调用时,出现了这个错误。 你知道为什么会出现这种行为吗?有没有更多关于这个主题的信息?谢谢! - Liang
如果容器是const,或者调用它的成员函数是const(void class::memberfunction() const),那么它可能是这样的。 - Gauthier

2
听起来像是 table 是一个 const 对象或引用,此时 begin 返回一个 const_iterator。将您的 for 循环更改为以下代码:
// typedefs make for an easier live, note const_iterator
typedef map<int, vector>::const_iterator iter_type;
for(iter_type table_iter = table.begin(); table_iter != table.end(); table_iter++)
{
    ...
}

或者迭代器在const成员函数内被定义。 - Gauthier

1

好的,你的问题已经部分得到了回答。

"我似乎无法确定迭代器为什么是const还是非const,或者如何处理这个问题。" 正如其他人所回答的那样,如果您的表被定义为常量,您需要定义一个const迭代器。 缺失的是,如果函数被定义为const,则迭代器也应该是const。

我认为一个const函数是你的问题,而不是一个const表。


0

我猜表格是一个常量&。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接