如何从STL的const_iterator中获取数据?

时间:2010-02-26 23:50:03

标签: c++ stl iterator

我有一些像这样运行的东西:

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()

6 个答案:

答案 0 :(得分:9)

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

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

这与你的问题没有关系,但是在寻找(即使我仍然不时地做到)时是一个常见的错误:如果位置it的内容是< em>指向对象的指针,为了调用对象上的方法,语法为(*it)->method(),因为有两个级别的间接。

答案 1 :(得分:3)

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

 if (*it == baseline) ...

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

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

答案 2 :(得分:2)

使用:

if (*it == baseline) 

答案 3 :(得分:1)

使用*它来访问迭代器指向的元素。当你比较我猜你应该使用if(* it == baseline)

答案 4 :(得分:1)

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

T const& a = *it;

答案 5 :(得分:0)

从我所知的std迭代器不是指针,但它是围绕底层单个数据元素的实际指针的薄包装。

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

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

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