2010-06-16 50 views
5

有沒有辦法從後面訪問向量上的元素?我要訪問的倒數第二element.currently我用下面的實現是:訪問後面的向量

myVector[myVector.size() - 2] 

但這似乎緩慢而笨重,有沒有更好的辦法?

回答

7

不可能是任何更快,但是這可能看起來更好:

myVector.end()[-2] 
+10

或'myVector.rbegin()[1]'。 – 2010-06-16 21:28:17

+0

@Pavel:我喜歡這個解決方案最好,它最有意義,看起來很乾淨。 – Faken 2010-06-16 21:33:31

+0

但是請注意,Ben的觀點並不是真正的更快。 – 2010-06-16 22:11:17

5

那麼你可以隨時使用矢量::回()。如果你想從後面迭代,使用reverse_iterator的:

vector<something>::reverse_iterator iter = v.rbegin(); 
iter++; //Iterates backwards 

載體是快速隨機訪問做,所以你的方法就是罰款了。在任何索引處訪問矢量元素都是O(1)操作。

+4

vector :: reverse_iterator iter = v.rbegin(); – 2010-06-16 23:28:55

+0

謝謝,修復它。 – fingerprint211b 2010-06-17 02:13:47

0

你的方式是完全有效的和相當快,除了你應該檢查myVector.size() > 1

+1

或者我可以像myvector.at(myVector.end - 2)那樣做,並且讓它更慢。 – Faken 2010-06-16 21:17:17

+0

'at'使用異常來指示超出範圍的錯誤。我不會在這個簡單的情況下使用它。 – 2010-06-16 21:20:26