2013-01-12 117 views
0
std::list<CPoint>::iterator iter= vertices.end(); 
CPoint point = *(iter+1); 

在這種情況下,我試圖給變量賦值(iter-1)(iter+1)。爲什麼它不起作用?而iter++iter--的作品。爲什麼`list :: iterator + 1`沒有工作?

+0

代碼是從哪裏來的? – hmatar

回答

2

簡單地說,這些操作不是iterator定義的一部分。您可以使用std::advance()函數。

顯然,operator+(int)可以重寫要做到這一點,就像operator++()是,但可能不是這樣,因爲這個操作是不能保證的不斷複雜,像(iter + n)語法本來建議。

advance

複雜度:線性。但是,如果InputIt另外滿足RandomAccessIterator的要求,則複雜度是恆定的。

+0

但是,如果我想將迭代器的值賦給另一個迭代器,它會起作用嗎?即iter2 = iter + 1'?由於'std :: advance'遞增傳遞給它的迭代器,所以不會'iter2 = std :: advance(iter,1)'增加iter',然後將遞增值賦給iter2。我應該如何讓它將迭代器的值+1賦值而不增加原始iter本身? – Ghost

+0

@Ghost:簡單...像iter2 = iter; std :: advance(iter2,1);'。 8-)當然,如果你想推進一個,你也可以這樣做:'iter2 = iter; ++ iter2;' – rodrigo

+0

ohh好的,謝謝! – Ghost

相關問題