Переделать find(итератор, итератор, char) в find_end(итератор, итератор, char)

Есть:

std::vector<BYTE>::iterator boyerMoore::crfind(std::vector<BYTE>::iterator iter, BYTE byte) { // BYTE = unsigned char

    auto result = std::find(
                std::next(S1),
                iter,
                byte);

    return (result == iter)? S1 : result;
}

Этот алгоритм работает, но ищет первое вхождение байта, а нужно последнее, т.е. find_end, который почему-то не работает с чем-то кроме итераторов.

Вопрос - как оптимальней всего с точки зрения памяти и процессора (в порядке важности) реализовать find_end для данного случая?


Ответы (1 шт):

Автор решения: Arenoros

не понял для чего что то переделывать, уже давно всё есть..

std::vector<BYTE> v{1,2,3,4,5,3,5,6};
BYTE byte = 3;
std::vector<BYTE>::iterator iter = ...; //не понятно для чего использовать прямой итератор в функции с обратным поиском
auto reveres_it = std::make_reverse_iterator(iter); // но можно сделать так
auto result = std::find(reveres_it, ++v.rend(), byte); // в остальном ни чего не изменится
return result.base(); // вернуть обычный итератор
→ Ссылка