【问题标题】:How to get data out of the STL's const_iterator?如何从 STL 的 const_iterator 中获取数据?
【发布时间】:2010-02-26 23:50:03
【问题描述】:

我有这样运行的东西:

T baseline;
list<T>::const_iterator it = mylist.begin();
while (it != mylist.end()) {
    if (it == baseline) /* <----- This is what I want to make happen */
    // do stuff
}

我的问题是我不知道如何从迭代器中提取数据。我觉得这是一件很愚蠢的事情,但我不知道该怎么做。

编辑:修复 begin.end()

【问题讨论】:

  • 你的while有问题:使用mylist.end()

标签: c++ stl iterator


【解决方案1】:

迭代器有一个“看起来”像指针的接口(但它们不一定是指针,所以不要把这个比喻过分)。

迭代器表示对容器中单个数据的引用。您想要的是在迭代器指定的位置访问容器的内容。您可以使用*it 访问位置it 的内容。同样,您可以使用it-&gt;method() 对位置it(如果内容是对象)的内容调用方法。

这实际上与您的问题无关,但要注意这是一个常见的错误(即使我仍然不时犯):如果位置 it 的内容是 指向对象的指针,调用对象上的方法,语法是(*it)-&gt;method(),因为有两个间接级别。

【讨论】:

    【解决方案2】:

    使用迭代器的语法与使用指针的语法基本相同。要获取迭代器“指向”的值,您可以使用 * 解引用:

     if (*it == baseline) ...
    

    如果列表是对象列表,您还可以使用-&gt; 访问对象的方法和属性:

     if (it->someValue == baseline) ...
    

    【讨论】:

      【解决方案3】:

      用途:

      if (*it == baseline) 
      

      【讨论】:

        【解决方案4】:

        使用 *it 访问迭代器指向的元素。当您进行比较时,我想您应该使用 if (*it == baseline)

        【讨论】:

          【解决方案5】:

          std 迭代器重载 operator*(),这样您就可以像访问指针一样访问引用的位置。

          T const& a = *it;
          

          【讨论】:

            【解决方案6】:

            据我所知,std 迭代器不是指针,而是对指向底层单个数据元素的实际指针的薄包装。

            你可以使用 something=*it 访问迭代器指向的元素。

            *it==baseline 是这种行为的正确代码。

            此外,如果您正在处理来自 STL 的集合,您可以考虑使用诸如 find_if 之类的函数 http://www.cplusplus.com/reference/algorithm/find_if/

            【讨论】:

              猜你喜欢
              • 2011-07-03
              • 1970-01-01
              • 1970-01-01
              • 2014-09-01
              • 2012-05-10
              • 1970-01-01
              • 2011-09-28
              • 2018-05-27
              • 1970-01-01
              相关资源
              最近更新 更多