我有一個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