Реализация 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 шт):
Если я правильно понимаю, сверхзадача примерно такая: есть вектор (контейнер) v1 и v2, и надо убедиться, что n элементов первого, начиная с какого-то i-го, равны n же элементам второго, начиная с какого-то j-го.
Если да - то не надо дополнительные фокусы, просто вызывайте стандартный алгоритм equal явно.
Например, сравнение 10 элементов v1, начиная с первого, и v2, начиная с третьего, будут иметь вид
equal(v1.begin()+1, v1.begin()+11, v2.begin()+3);
Вам не надо передавать конец "подстроки" или "позицию" (ее смысл совершенно неясен) - число сравниваемых элементов определяется первым диапазоном.
Еще - конец диапазона определяется итератором за концом диапазона.
И еще - к алгоритму Боера-Мура алгоритм equal не имеет никакого отношения...