Здравствуйте, slava_phirsov, Вы писали:
EP>>1. Четыре одинаковых итератора тут только в частном случае, а в общем — две пары разных итераторов.
_>Одна беда — поскольку типы итераторов являются параметрами шаблона, то типизация не помешает перепутать эти пары местами.
В таком случае даже
Range версия не спасёт
template<class ForwardRange1, class ForwardRange2>
typename range_iterator<ForwardRange1>::type
search(ForwardRange1& rng1, const ForwardRange2& rng2);
_>Что касается конкретно std::search, то ИМХО в большинстве случаев все четыре итератора будут одного типа.
Согласен.
EP>>2. Во всей библиотеке итераторы из одного range принимаются по порядку, запутаться трудно.
_>Однако новички путаются. И даже — страшно сказать — забывают, надо ли ставить первым в паре begin или end. Да, со временем привыкают.
Код-то тестировать (или в крайнем случае проверять на нескольких входных данных вручную) нужно в любом случае, там всё и вылезет. Плюс есть же всякие debug итераторы и алгоритмы.
_>Ну так о том и речь, что ножик-то слишком острый, чтобы намазывать им масло на хлеб, мог бы быть и потупее.
Скоро будет в стандарте. А в библиотеках уже больше 10 лет.