Переделать 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(); // вернуть обычный итератор