Sử dụng STL, tôi muốn tìm phiên bản cuối cùng của một giá trị nhất định trong một chuỗi.Có thuật toán STL để tìm phiên bản cuối cùng của một giá trị trong một chuỗi không?
Ví dụ này sẽ tìm thấy trường hợp đầu tiên của 0 trong một vectơ int.
#include <algorithm>
#include <iterator>
#include <vector>
typedef std::vector<int> intvec;
intvec values;
// ... ints are added to values
intvec::const_iterator split = std::find(values.begin(), values.end(), 0);
Bây giờ tôi có thể sử dụng split
để làm những việc cho subranges begin()
.. split
và split
.. end()
. Tôi muốn làm một cái gì đó tương tự, nhưng với phân chia thành cuối cùng thể hiện của 0. Bản năng đầu tiên của tôi là sử dụng trình lặp ngược.
intvec::const_iterator split = std::find(values.rbegin(), values.rend(), 0);
Điều này không hoạt động vì split
là loại sai của trình lặp. Vì vậy, ...
intvec::const_reverse_iterator split = std::find(values.rbegin(), values.rend(), 0);
Nhưng vấn đề bây giờ là tôi không thể làm cho "đầu" và "đuôi" dao động như begin(), split
và split, end()
vì những người không được đảo ngược vòng lặp. Có cách nào để chuyển đổi các iterator đảo ngược để chuyển tiếp tương ứng (hoặc truy cập ngẫu nhiên) iterator? Có cách nào tốt hơn để tìm phiên bản cuối cùng của một phần tử trong chuỗi sao cho tôi bị bỏ lại với một trình lặp tương thích?
Tuyệt vời. Cảm ơn bạn! –
Lưu ý rằng 'reverse_iterator :: base()' không trỏ đến cùng một phần tử, mà thay vào phần tử sau mục tìm thấy. Scott Meyer đã thể hiện tốt nhất trong hướng dẫn 3 trong bài viết này: http://www.ddj.com/cpp/184401406 – AFoglia
[std :: reverse_iterator :: base] (http://en.cppreference.com/w/cpp/ mục nhập iterator/reverse_iterator/base) tại cppreference – maxschlepzig