2010-02-26 20 views
4

我有一些運行這樣的:如何從STL的const_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()

+5

你'while'有一個問題:使用'mylist.end()'。 – dirkgently 2010-02-26 23:55:45

回答

9

迭代器有一個「看起來」像一個指針的接口(但不一定是指針,所以不要把這個比喻太遠)。

迭代器表示對容器中單個數據片段的引用。你想要的是訪問迭代器指定位置的容器內容。您可以使用*it訪問位置it上的內容。同樣,您可以使用it->method()來調用位於it(如果內容是對象)的內容的方法。

這並不是真的與你的問題有關,但它是一個常見的錯誤,在尋找(即使我仍然不時):如果位置it的內容是一個指針指向一個對象,要調用對象的方法,語法是(*it)->method(),因爲有兩個間接級別。

3

的語法使用迭代器是基本相同的指針。要獲得迭代器「點」您可以使用*提領值:

if (*it == baseline) ... 

如果列表是一個對象,你也可以訪問方法和對象的屬性與->列表:

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

使用*它來訪問迭代器指向的元素。當你比較我猜你應該使用if(* it == baseline)

1

std迭代器重載運算符*(),這樣您可以像訪問指針一樣訪問引用的位置。

T const& a = *it; 
0

從我所知道的std iterators不是指針,而是一個薄的包裝器,實際指向底層的單個數據元素。

您可以使用 something=*it 訪問迭代器指向的元素。

* it == baseline是這種行爲的正確代碼。

此外,如果你正在處理從STL集合,你可以考慮使用的功能,如find_if http://www.cplusplus.com/reference/algorithm/find_if/