Реализация strncmp для вектора на итераторах

Дано:
Строка: S1 - начало вектора, S2 - конец вектора(std::next(S2) - будет end() вектора)
Подстрока: R1 - начало вектора, R2 - конец вектора(std::next(R2) - будет end() вектора)
Позиция: pos
Команда: strncmp(Строка, Подстрока, Позиция);

Нужно сделать аналог СИшного strncmp, только возвращающего true/false


Получил что-то типа:

bool boyerMoore::TextCompare(аргументы см. выше){

    return std::equal(
                R1,
                std::next(R2),
                std::distance(S1, pos));

}

Но не уверен, что это верно....


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

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

Если я правильно понимаю, сверхзадача примерно такая: есть вектор (контейнер) v1 и v2, и надо убедиться, что n элементов первого, начиная с какого-то i-го, равны n же элементам второго, начиная с какого-то j-го.

Если да - то не надо дополнительные фокусы, просто вызывайте стандартный алгоритм equal явно.

Например, сравнение 10 элементов v1, начиная с первого, и v2, начиная с третьего, будут иметь вид

equal(v1.begin()+1, v1.begin()+11, v2.begin()+3);

Вам не надо передавать конец "подстроки" или "позицию" (ее смысл совершенно неясен) - число сравниваемых элементов определяется первым диапазоном.

Еще - конец диапазона определяется итератором за концом диапазона.

И еще - к алгоритму Боера-Мура алгоритм equal не имеет никакого отношения...

→ Ссылка