名前空間
変種
操作

std::mismatch

提供: cppreference.com
< cpp‎ | algorithm
2012年5月14日 (月) 21:11時点におけるKariya mitsuru (トーク | 投稿記録)による版

(差分) ←前の版 | 最新版 (差分) | 次の版→ (差分)

テンプレート:cpp/algorithm/sidebar

Defined in header <algorithm>
template< class InputIterator1, class InputIterator2 >

std::pair<InputIterator1,InputIterator2>
    mismatch( InputIterator1 first1,
              InputIterator1 last1,

              InputIterator2 first2 );
(1)
template< class InputIterator1, class InputIterator2, class BinaryPredicate >

std::pair<InputIterator1,InputIterator2>
    mismatch( InputIterator1 first1,
              InputIterator1 last1,
              InputIterator2 first2,

              BinaryPredicate p );
(2)

Returns the first mismatching pair of elements from two ranges: one defined by [first1, last1) and another starting at first2. The first version of the function uses operator== to compare the elements, the second version uses the given binary predicate p.

目次

Parameters

first1, last1 - the first range of the elements
first2 - the beginning of the second range of the elements
p - if the elements should be treated as equal ​true を返す二項述語。

述語関数のシグネチャは以下と同等なものであるべきです。

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

シグネチャが const & を持つ必要はありませんが、関数は渡されたオブジェクトを変更してはなならず、値カテゴリに関わらず Type1 および Type2 型 (およびそれらの const 修飾された型) のすべての値を受理できなければなりません (そのため Type1 & は許されません。 また Type1 に対してムーブがコピーと同等でなければ Type1 も許されません (C++11以上))。
Type1 および Type2 は、 InputIterator1 および InputIterator2 型のオブジェクトの逆参照からType1 および Type2 にそれぞれ暗黙に変換可能なものでなければなりません。 ​

Return value

std::pair with iterators to the first two non-equivalent elements, or, if no different elements found, pair with last1 and the corresponding iterator from the second range.

Complexity

At most last1 - first1 applications of the predicate

Possible implementation

Example

This program determines the the longest substring that is simultaneously found at the very beginning of the given string and at the very end of it, in reverse order (possibly overlapping)

#include <iostream>
#include <string>
#include <algorithm>
 
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

See also

テンプレート:cpp/algorithm/dcl list equalテンプレート:cpp/algorithm/dcl list findテンプレート:cpp/algorithm/dcl list lexicographical compareテンプレート:cpp/algorithm/dcl list search