【问题标题】:m.find(...) == m.end() - which is used, iterator or const_iteratorm.find(...) == m.end() - 使用,迭代器或 const_iterator
【发布时间】:2010-04-13 19:18:07
【问题描述】:

std::map find/end 都提供了 const_iterator 和 iterator,例如

  iterator end ();
  const_iterator end () const

出于好奇,如果我有一个 std::map ,它将在这里被调用/比较,是一个迭代器还是一个 const_iterator ? :

if(m.find(key) != m.end()) {
   ...
}

我应该关心吗?

【问题讨论】:

    标签: c++ templates stl


    【解决方案1】:

    如果mconst,那么将返回一个const_iterator;否则将返回 iterator

    如果您所做的只是测试地图中是否存在某个元素,那么使用哪个元素并不重要。

    【讨论】:

    • 编写自己的算法时很重要。然后您应该指定您的算法是否是修改算法。如果不是,那么您说它适用于const_iterator。了解您调用的哪些算法正在修改哪些没有修改也是一个好主意:这样当您遇到错误时,您可以知道这是因为您传递了一个 const_iteratr(可能是因为它来自一个 const 对象)一种修改算法。
    【解决方案2】:

    这取决于您的地图是否为 const。如果是,您将获得一个 const_iterator。如果没有,你会得到一个迭代器。

    【讨论】:

      猜你喜欢
      • 2011-12-07
      • 2011-06-20
      • 1970-01-01
      • 2020-12-22
      • 2011-07-03
      • 2021-02-11
      • 1970-01-01
      • 1970-01-01
      • 2014-02-21
      相关资源
      最近更新 更多