【问题标题】:const_iterator to iterator C++ Errorconst_iterator 到迭代器 C++ 错误
【发布时间】:2011-12-07 03:08:52
【问题描述】:

我正在尝试使用以下代码块迭代 map 对象:

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

我不断收到错误提示:

请求从 const_iterator 转换为非标量类型迭代器

而且我似乎无法确定为什么迭代器是const 而不是const,或者如何处理这个问题。

【问题讨论】:

  • 哪一行给出了错误?
  • 我发布的行; for 循环线。

标签: c++ map iterator constants


【解决方案1】:

使用map&lt;int, vector&gt;::const_iterator 代替map::begin 返回。

【讨论】:

  • 我注意到有时,使用迭代器没有问题,然后在其他地方我需要使用 const_iterator。这似乎与作用域有关,因为我在对 lambda [=] 捕获的向量运行 .begin() 函数调用时出现此错误。知道为什么存在这种行为吗?有没有关于这个主题的更多信息?谢谢!
  • 如果容器是const,或者调用它的成员函数是constvoid class::memberfunction() const),则可以这样
【解决方案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成员函数中。
【解决方案3】:

嗯,你的问题得到了部分回答。

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

我认为 const 函数是您的问题,而不是 const 表。

【讨论】:

    【解决方案4】:

    我猜 table 是一个 const&。

    【讨论】:

      猜你喜欢
      • 2011-12-07
      • 2020-12-22
      • 1970-01-01
      • 2011-07-03
      • 2021-02-11
      • 1970-01-01
      • 2011-09-28
      • 2021-01-15
      • 1970-01-01
      相关资源
      最近更新 更多