我有一些像这样运行的东西:
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()
答案 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/