Используя STL, я хочу найти последний экземпляр определенного значения в последовательности.
Этот пример найдет первый первый экземпляр 0 в векторе целых.
#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);
Теперь я могу использовать split
для выполнения операций с поддиапазонами begin()
.. split
и split
.. end()
. Я хочу сделать что-то похожее, но с параметром split, равным last , экземпляру 0. Моим первым инстинктом было использование обратных итераторов.
intvec::const_iterator split = std::find(values.rbegin(), values.rend(), 0);
Это не работает, потому что split
- это неправильный тип итератора. Итак ...
intvec::const_reverse_iterator split = std::find(values.rbegin(), values.rend(), 0);
Но проблема в том, что я не могу сделать диапазоны "head" и "tail", такие как begin(), split
и split, end()
, потому что это не обратные итераторы. Есть ли способ преобразовать обратный итератор в соответствующий прямой (или произвольный доступ) итератор? Есть ли лучший способ найти последний экземпляр элемента в последовательности, чтобы у меня остался совместимый итератор?