Существует ли алгоритм STL для нахождения последнего экземпляра значения в последовательности?

Используя STL, я хочу найти последний экземпляр определенного значения в последовательности.

Этот пример найдет первую инстанцию 0 в векторе ints.

#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(). Я хочу сделать что-то подобное, но с набором разделения к последнему экземпляру 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);

Но проблема теперь состоит в том, что я не могу сделать диапазоны "головы" и "хвоста" как begin(), split и split, end() потому что это не обратные итераторы. Существует ли способ преобразовать обратный итератор в соответствие вперед (или произвольный доступ) итератор? Существует ли лучший способ найти последний экземпляр элемента в последовательности так, чтобы меня оставили с совместимым итератором?

19
задан Adrian McCarthy 28 February 2012 в 21:14
поделиться

2 ответа

Но проблема в том, что я не могу сделать диапазоны "головы" и "хвоста", используя begin () и end (), потому что это не так обратные итераторы.

reverse_iterator :: base () - это то, что вы ищете - раздел новые члены в SGIs reverse_iterator description или здесь, на cppreference.com

23
ответ дан 30 November 2019 в 04:11
поделиться

А как насчет std :: find_end ? (Чтобы найти последнее вхождение последовательности)

6
ответ дан 30 November 2019 в 04:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: