std::list<CPoint>::iterator iter= vertices.end();
CPoint point = *(iter+1);
在這種情況下,我試圖給變量賦值(iter-1)
或(iter+1)
。爲什麼它不起作用?而iter++
或iter--
的作品。爲什麼`list :: iterator + 1`沒有工作?
std::list<CPoint>::iterator iter= vertices.end();
CPoint point = *(iter+1);
在這種情況下,我試圖給變量賦值(iter-1)
或(iter+1)
。爲什麼它不起作用?而iter++
或iter--
的作品。爲什麼`list :: iterator + 1`沒有工作?
簡單地說,這些操作不是iterator
定義的一部分。您可以使用std::advance()
函數。
顯然,operator+(int)
可以重寫要做到這一點,就像operator++()
是,但可能不是這樣,因爲這個操作是不能保證的不斷複雜,像(iter + n)
語法本來建議。
從advance
:
複雜度:線性。但是,如果
InputIt
另外滿足RandomAccessIterator
的要求,則複雜度是恆定的。
但是,如果我想將迭代器的值賦給另一個迭代器,它會起作用嗎?即iter2 = iter + 1'?由於'std :: advance'遞增傳遞給它的迭代器,所以不會'iter2 = std :: advance(iter,1)'增加iter',然後將遞增值賦給iter2。我應該如何讓它將迭代器的值+1賦值而不增加原始iter本身? – Ghost
@Ghost:簡單...像iter2 = iter; std :: advance(iter2,1);'。 8-)當然,如果你想推進一個,你也可以這樣做:'iter2 = iter; ++ iter2;' – rodrigo
ohh好的,謝謝! – Ghost
代碼是從哪裏來的? – hmatar