2014-10-06 98 views
0

我有一個向量,我正在使用迭代器修改它的內容。如果滿足某些條件,我需要修改向量中下一個元素的內容。我認爲,以下將工作:使用迭代器修改容器的內容

*(it + 1)++; 

這對我有意義,因爲我已經能夠告訴循環停止使用條件it != vec.end() - 1結束的一個短。它似乎並沒有對容器的內容有任何效果的,所以我在下面解決:

++it; 
*it += 1; 
--it; 

這三條線與前一個,我認爲這是一個黑客。有一個更好的方法嗎?我錯過了能夠增加矢量中下一個元素的訣竅是什麼?

回答

2

你的意思是:

(*(it + 1))++; 

++*(it + 1).這是一個優先發布,類似於如何*p++遞增指針,而不是指向的值。

或者,對於隨機訪問迭代器,您可以編寫it[1]++;++it[1];

除非您需要後增量的屬性,否則通常最好使用預增量。這是因爲後增量按值返回,所以如果對象的拷貝過程昂貴,但實際上並不需要拷貝,那麼你就浪費了拷貝的時間。

+0

你贏得了速度競賽。 :)也考慮到'++ *(it + 1)'的作品,並且更簡潔明瞭。 – 2014-10-06 05:56:01

+0

@JohnZwinck增加,ty – 2014-10-06 05:57:22

+0

在這種情況下,對象只是整數,但我會記住前/後增量。 – 2014-10-06 06:00:43

1

您正在創建一個指針並將其遞增。 取消引用迭代器,然後遞增。

(*(it + 1))++; 

*(it + 1) += 1;