Namespaces
Variants

std:: mismatch

From cppreference.net
Algorithm library
Constrained algorithms and algorithms on ranges (C++20)
Constrained algorithms, e.g. ranges::copy , ranges::sort , ...
Execution policies (C++17)
Non-modifying sequence operations
Batch operations
(C++17)
Search operations
(C++11) (C++11) (C++11)
mismatch

Modifying sequence operations
Copy operations
(C++11)
(C++11)
Swap operations
Transformation operations
Generation operations
Removing operations
Order-changing operations
(until C++17) (C++11)
(C++20) (C++20)
Sampling operations
(C++17)

Sorting and related operations
Partitioning operations
Sorting operations
Binary search operations
(on partitioned ranges)
Set operations (on sorted ranges)
Merge operations (on sorted ranges)
Heap operations
Minimum/maximum operations
Lexicographical comparison operations
Permutation operations
C library
Numeric operations
Operations on uninitialized memory
Определено в заголовочном файле <algorithm>
template < class InputIt1, class InputIt2 >

std:: pair < InputIt1, InputIt2 >
mismatch ( InputIt1 first1, InputIt1 last1,

InputIt2 first2 ) ;
(1) (constexpr начиная с C++20)
template < class ExecutionPolicy, class ForwardIt1, class ForwardIt2 >

std:: pair < ForwardIt1, ForwardIt2 >
mismatch ( ExecutionPolicy && policy,
ForwardIt1 first1, ForwardIt1 last1,

ForwardIt2 first2 ) ;
(2) (начиная с C++17)
template < class InputIt1, class InputIt2, class BinaryPred >

std:: pair < InputIt1, InputIt2 >
mismatch ( InputIt1 first1, InputIt1 last1,

InputIt2 first2, BinaryPred p ) ;
(3) (constexpr начиная с C++20)
template < class ExecutionPolicy,

class ForwardIt1, class ForwardIt2, class BinaryPred >
std:: pair < ForwardIt1, ForwardIt2 >
mismatch ( ExecutionPolicy && policy,
ForwardIt1 first1, ForwardIt1 last1,

ForwardIt2 first2, BinaryPred p ) ;
(4) (начиная с C++17)
template < class InputIt1, class InputIt2 >

std:: pair < InputIt1, InputIt2 >
mismatch ( InputIt1 first1, InputIt1 last1,

InputIt2 first2, InputIt2 last2 ) ;
(5) (начиная с C++14)
(constexpr начиная с C++20)
template < class ExecutionPolicy, class ForwardIt1, class ForwardIt2 >

std:: pair < ForwardIt1, ForwardIt2 >
mismatch ( ExecutionPolicy && policy,
ForwardIt1 first1, ForwardIt1 last1,

ForwardIt2 first2, ForwardIt2 last2 ) ;
(6) (начиная с C++17)
template < class InputIt1, class InputIt2, class BinaryPred >

std:: pair < InputIt1, InputIt2 >
mismatch ( InputIt1 first1, InputIt1 last1,

InputIt2 first2, InputIt2 last2, BinaryPred p ) ;
(7) (начиная с C++14)
(constexpr начиная с C++20)
template < class ExecutionPolicy,

class ForwardIt1, class ForwardIt2, class BinaryPred >
std:: pair < ForwardIt1, ForwardIt2 >
mismatch ( ExecutionPolicy && policy,
ForwardIt1 first1, ForwardIt1 last1,

ForwardIt2 first2, ForwardIt2 last2, BinaryPred p ) ;
(8) (начиная с C++17)

Возвращает пару итераторов к первому несовпадающему элементу из [ first1 , last1 ) и диапазона, начинающегося с first2 :

  • Для перегрузок (1-4) второй диапазон содержит std:: distance ( first1, last1 ) элементов.
  • Для перегрузок (5-8) второй диапазон представляет собой [ first2 , last2 ) .
  • Если std:: distance ( first1, last1 ) и std:: distance ( first2, last2 ) различаются, сравнение прекращается при достижении last1 или last2 .
1,5) Элементы сравниваются с использованием operator == .
3,7) Элементы сравниваются с использованием заданного бинарного предиката p .
2,4,6,8) То же, что и (1,3,5,7) , но выполняется в соответствии с policy .
Эти перегрузки участвуют в разрешении перегрузки только при выполнении всех следующих условий:

std:: is_execution_policy_v < std:: decay_t < ExecutionPolicy >> равно true .

(до C++20)

std:: is_execution_policy_v < std:: remove_cvref_t < ExecutionPolicy >> равно true .

(начиная с C++20)

Содержание

Параметры

first1, last1 - пара итераторов, определяющая первый диапазон элементов для сравнения
first2, last2 - пара итераторов, определяющая второй диапазон элементов для сравнения
policy - политика выполнения для использования
p - бинарный предикат, который возвращает ​ true если элементы должны рассматриваться как равные.

Сигнатура функции-предиката должна быть эквивалентна следующей:

bool pred ( const Type1 & a, const Type2 & b ) ;

Хотя сигнатура не обязана иметь const & , функция не должна модифицировать передаваемые ей объекты и должна быть способна принимать все значения типа (возможно const) Type1 и Type2 независимо от категории значения (следовательно, Type1 & не допускается , как и Type1 , если для Type1 перемещение не эквивалентно копированию (начиная с C++11) ).
Типы Type1 и Type2 должны быть такими, чтобы объекты типов InputIt1 и InputIt2 могли быть разыменованы и затем неявно преобразованы в Type1 и Type2 соответственно. ​

Требования к типам
-
InputIt1 должен удовлетворять требованиям LegacyInputIterator .
-
InputIt2 должен удовлетворять требованиям LegacyInputIterator .
-
ForwardIt1 должен удовлетворять требованиям LegacyForwardIterator .
-
ForwardIt2 должен удовлетворять требованиям LegacyForwardIterator .
-
BinaryPred должен удовлетворять требованиям BinaryPredicate .

Возвращаемое значение

std::pair с итераторами на первые два неравных элемента.

Если last1 достигнут, второй итератор в паре является std:: distance ( first1, last1 ) итератором после first2 .

Для перегрузок (5-8) , если last2 достигнут, первый итератор в паре является std:: distance ( first2, last2 ) итератором после first1 .

Сложность

Пусть N 1 равно std:: distance ( first1, last1 ) и N 2 равно std:: distance ( first2, last2 ) :

1,2) Не более N 1 сравнений с использованием operator == .
3,4) Не более N 1 применений предиката p .
5,6) Не более min(N 1 ,N 2 ) сравнений с использованием operator == .
7,8) Не более min(N 1 ,N 2 ) применений предиката p .

Исключения

Перегрузки с параметром шаблона с именем ExecutionPolicy сообщают об ошибках следующим образом:

  • Если выполнение функции, вызванной как часть алгоритма, выбрасывает исключение и ExecutionPolicy является одним из стандартных политик , std::terminate вызывается. Для любой другой ExecutionPolicy поведение определяется реализацией.
  • Если алгоритму не удается выделить память, std::bad_alloc выбрасывается.

Возможная реализация

mismatch (1)
template<class InputIt1, class InputIt2>
std::pair<InputIt1, InputIt2>
    mismatch(InputIt1 first1, InputIt1 last1, InputIt2 first2)
{
    while (first1 != last1 && *first1 == *first2)
        ++first1, ++first2;
    return std::make_pair(first1, first2);
}
mismatch (3)
template<class InputIt1, class InputIt2, class BinaryPred>
std::pair<InputIt1, InputIt2>
    mismatch(InputIt1 first1, InputIt1 last1, InputIt2 first2, BinaryPred p)
{
    while (first1 != last1 && p(*first1, *first2))
        ++first1, ++first2;
    return std::make_pair(first1, first2);
}
mismatch (5)
template<class InputIt1, class InputIt2>
std::pair<InputIt1, InputIt2>
    mismatch(InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2)
{
    while (first1 != last1 && first2 != last2 && *first1 == *first2)
        ++first1, ++first2;
    return std::make_pair(first1, first2);
}
mismatch (7)
template<class InputIt1, class InputIt2, class BinaryPred>
std::pair<InputIt1, InputIt2>
    mismatch(InputIt1 first1, InputIt1 last1,
             InputIt2 first2, InputIt2 last2, BinaryPred p)
{
    while (first1 != last1 && first2 != last2 && p(*first1, *first2))
        ++first1, ++first2;
    return std::make_pair(first1, first2);
}
**Примечание:** Весь код C++ внутри тегов `
` и `` оставлен без изменений, как и требовалось. HTML-теги и атрибуты также сохранены в оригинальном виде.

Пример

Эта программа определяет самую длинную подстроку, которая одновременно находится в самом начале заданной строки и в самом её конце, в обратном порядке (возможно, с перекрытием).

#include <algorithm>
#include <iostream>
#include <string>
std::string mirror_ends(const std::string& in)
{
    return std::string(in.begin(),
                       std::mismatch(in.begin(), in.end(), in.rbegin()).first);
}
int main()
{
    std::cout << mirror_ends("abXYZba") << '\n'
              << mirror_ends("abca") << '\n'
              << mirror_ends("aba") << '\n';
}

Вывод:

ab
a
aba

Смотрите также

определяет, являются ли два набора элементов одинаковыми
(шаблон функции)
находит первый элемент, удовлетворяющий определенным критериям
(шаблон функции)
возвращает true если один диапазон лексикографически меньше другого
(шаблон функции)
ищет первое вхождение диапазона элементов
(шаблон функции)
находит первую позицию, в которой два диапазона различаются
(функциональный объект алгоритма)