2010-06-16 39 views
5

Có cách nào truy cập phần tử trên vectơ bắt đầu từ phía sau không? Tôi muốn truy cập phần tử cuối cùng thứ hai. Hiện tại tôi đang sử dụng các yếu tố sau để đạt được điều đó:truy cập vectơ từ phía sau

myVector[myVector.size() - 2] 

nhưng điều này có vẻ chậm và khó khăn, có cách nào tốt hơn không?

Trả lời

7

Không có khả năng là bất kỳ nhanh hơn, nhưng điều này có thể trông đẹp hơn:

myVector.end()[-2] 
+10

Hoặc 'myVector.rbegin() [1]'. –

+0

@Pavel: Tôi thích giải pháp đó tốt nhất, nó có ý nghĩa nhất và trông rất sạch sẽ. – Faken

+0

Lưu ý rằng điểm của Ben về điều này không thực sự nhanh hơn nữa vẫn được áp dụng, tuy nhiên. –

5

Vâng, bạn luôn có thể sử dụng vector :: back(). Nếu bạn muốn lặp lại từ phía sau, hãy sử dụng công cụ reverse_iterator:

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

Vectơ được thực hiện để truy cập ngẫu nhiên nhanh chóng, vì vậy cách của bạn cũng tốt. Việc truy cập phần tử vectơ tại bất kỳ chỉ mục nào là hoạt động O (1).

+4

vector :: reverse_iterator iter = v.rbegin(); –

+0

Cảm ơn, đã sửa nó. – fingerprint211b

0

Cách của bạn hoàn toàn hợp lệ và khá nhanh, ngoại trừ việc bạn nên kiểm tra myVector.size() > 1.

+1

Hoặc tôi có thể làm điều đó như myvector.at (myVector.end - 2) và làm cho nó thậm chí còn chậm hơn. – Faken

+0

'at' sử dụng ngoại lệ để chỉ ra lỗi ngoài phạm vi. Tôi không sử dụng nó trong trường hợp đơn giản này. –

Các vấn đề liên quan