Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

C++14 Algorithms

Boost , The Boost Algorithm Library , The Boost Algorithm Library

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Файл заголовка equal.hpp содержит два варианта алгоритма stl.<equal>. Алгоритм проверяет, содержат ли две последовательности одинаковые значения.

До (предложенного) C++14 алгоритм<std::equal>взяли три итератора и необязательный сравнительный предикат. Первые два итератора<[first1,last1)>определили последовательность, а второй<first2>определил начало второй последовательности. Предполагается, что вторая последовательность имеет ту же длину, что и первая.

В C++14 были введены два новых варианта, берущие четыре итератора и необязательный сравнительный предикат. Четыре итератора определяют две последовательности<[first1,last1)>и<[first2,last2)>явно, а не определяют вторую неявно. Это приводит к правильным ответам в большем количестве случаев (и избегать неопределенного поведения в других).

Рассмотрим две последовательности:

auto seq1 = { 0, 1, 2 };
auto seq2 = { 0, 1, 2, 3, 4 };
std::equal ( seq1.begin (), seq1.end (), seq2.begin ()); // true
std::equal ( seq2.begin (), seq2.end (), seq1.begin ()); // Undefined behavior
std::equal ( seq1.begin (), seq1.end (), seq2.begin (), seq2.end ()); // false

Вы можете утверждать, что<true>является правильным ответом в первом случае, даже если последовательности не одинаковы. Первые N в<seq2>те же, что и в<seq1>, но это не все, что в<seq2>. Но во втором случае алгоритм будет читать дальше конца<seq1>, что приведет к неопределенному поведению (большое землетрясение, неправильные результаты, беременная кошка и т. д.).

Однако, если две последовательности указаны полностью, ясно, что они не равны.

interface

Функция<equal>возвращается истинной, если две последовательности сравниваются равными; т.е. если каждый элемент в последовательности сравнивается с соответствующим элементом в другой последовательности. Одна версия использует<std::equal_to>для сравнения; другая позволяет абоненту передать предикат для сравнения.

template <class InputIterator1, class InputIterator2>
bool equal ( InputIterator1 first1, InputIterator1 last1,
             InputIterator2 first2, InputIterator2 last2 );
template <class InputIterator1, class InputIterator2, class BinaryPredicate>
bool equal ( InputIterator1 first1, InputIterator1 last1,
             InputIterator2 first2, InputIterator2 last2, BinaryPredicate pred );

Examples

<c1>, содержащее<{0,1, 2,3,14,15}>, и<c2>содержащее<{1, 2,3}>, то

equal ( c1.begin (),     c1.end (),       c2.begin (), c2.end ()) --> false
equal ( c1.begin () + 1, c1.begin () + 3, c2.begin (), c2.end ()) --> true
equal ( c1.end (),       c1.end (),       c2.end (),   c2.end ()) --> true  // empty sequences are alway equal to each other

Iterator Requirements

<equal>работает на всех итераторах, кроме выходных итераторов.

Complexity

Оба варианта<equal>работают вO(N)(линейное) время; то есть они сравниваются с каждым элементом в списке один раз. Если последовательность не будет найдена равной в какой-либо точке, рутина прекратится немедленно, без изучения остальных элементов.

Exception Safety

Оба варианта<equal>берут свои параметры по стоимости и не зависят ни от какого глобального государства. Таким образом, все процедуры в этом файле обеспечивают сильную гарантию исключения.

Notes
  • Четыре итератора версии рутины<equal>является частью стандарта C++14. Когда стандартные библиотеки C++14 становятся доступными, следует использовать реализацию из стандартной библиотеки.
  • <equal>возвращается истинно для двух пустых диапазонов, независимо от того, какой предикат передается для проверки против.

PrevUpHomeNext

Статья C++14 Algorithms раздела The Boost Algorithm Library The Boost Algorithm Library может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: The Boost Algorithm Library ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 23:40:18/0.028975963592529/1