2010-06-16 55 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