我有一个vector<list<customClass> >
C++迭代混乱
我有一个迭代器vector<list<customClass> >::const_iterator x
当我试图访问customClass的成员,像这样:
x[0]->somefunc()
,我得到一个非指针类型的错误/未找到。
我有一个vector<list<customClass> >
C++迭代混乱
我有一个迭代器vector<list<customClass> >::const_iterator x
当我试图访问customClass的成员,像这样:
x[0]->somefunc()
,我得到一个非指针类型的错误/未找到。
这是一个完整的工作片段。要回答你的问题,带注释[1]的行显示了如何解引用const_iterator,而注释[2]显示了如何使用操作符[]解引用。
#include <vector>
#include <list>
#include <iostream>
class Foo
{
public:
void hello() const
{
std::cout << "hello - type any key to continue\n";
getchar();
}
void func(std::vector<std::list<Foo> > const& vec)
{
std::vector<std::list<Foo> >::const_iterator qVec = vec.begin();
qVec->front().hello(); // [1] dereference const_iterator
}
};
int main(int argc, char* argv[])
{
std::list<Foo> list;
Foo foo;
list.push_front(foo);
std::vector<std::list<Foo> > vec;
vec.push_back(list);
foo.func(vec);
vec[0].front().hello(); // [2] dereference vector using []
}
迭代器类不提供operator []的,因此你不能用它这样的。你应该把它作为X-> somefunc()
但是,这不会指向实际的类。有没有指向列表,但指向类 – 2009-12-12 04:14:08
因为你必须使用两个层级的间接。从第一个迭代器获取列表对象。然后得到迭代器中的列表对象,解引用这个迭代器取得SomeClass的对象 – Naveen 2009-12-12 04:26:33
因为x是一个向量的迭代器,它是一种随机访问迭代器。同样,它提供了operator []。但是,结果是std :: list的常量左值,它不提供“ - >”。 – sellibitze 2009-12-12 08:15:36
x是一个迭代器,它就像一个指针 - 它指向一个列表。所以你只能使用std :: list成员的函数。
的常量迭代器将间接引用到list<customClass>
对象不是一个指针列表。你必须访问索引在该列表中的类...
忽略错误检查:
(*x)[0].somefunc()
stl清单不要超载索引运算符 – csj 2009-12-12 05:24:24
啊,谢谢你的更正。 – 2009-12-12 06:08:57
,如果你想直接访问的列表和向量类已经实现了[]操作,所以直接访问它:vectorObj [x] .someFunc();
迭代器,通过该列表会(迭代它就像顾名思义),将它用于。
迭代器解引用到列表中。如果你想访问列表中的一个对象,那么你将不得不使用列表方法来做到这一点。但是,由于stl列表不会超载索引运算符,因此这不是一个有效的选项。
这将让你打电话somefunc的第一个元素列表:
(*x).front().somefunc();
在另一方面,如果你想为你的列表中的迭代器,你可以做这样的事情:
list<customClass>::const_iterator listIterator = (*x).begin();
listIterator->somefunc();
寻找一个实际的解决方案也:) – 2009-12-12 04:26:04