Специализни шаблонца!

Previous Entry Поделиться Next Entry
What do I do when there's no STL algorithm I need
Vash
udpn

  1. template <class NeedleIterator, class HaystackIterator>

  2. bool equals_zip(

  3.  NeedleIterator needle_begin, NeedleIterator needle_end,

  4.  HaystackIterator haystack_begin, HaystackIterator haystack_end

  5. ) {

  6.  while (needle_begin != needle_end) {

  7.    if (haystack_begin == haystack_end)

  8.      return false;

  9.    if (!(*needle_begin == *haystack_begin))

  10.      return false;

  11.    ++needle_begin;

  12.    ++haystack_begin;

  13.  }

  14.  return true;

  15. }


  • 1
А чем это отличается от std::search?

Когда search не найдёт совпадения со сдвигом 0, он начнёт пробовать сдвиги дальше. Можно проверять, что search нашёл совпадение именно в позиции 0, то это уже O(N^2).

Я понял.
У меня самого очень редко получается что-то из STL использовать. Постоянно какая-то мелочь - то аллокация внутри вызова, то параметра не хватает.

хм... а mismatch тут не подойдёт?

Сейчас мне кажется, что подойдёт. Тогда почему-то забраковал. Либо тогда ошибся, либо сейчас не могу вспомнить всех условий задачи.

UPD. Кажется, там что-то было связано с длинами сравниваемых фрагментов.

Edited at 2015-12-09 15:48 (UTC)

  • 1
?

Log in

No account? Create an account