📜  std :: mismatch()与C++中的示例(1)

📅  最后修改于: 2023-12-03 15:20:20.883000             🧑  作者: Mango

介绍

在C++ STL中,std::mismatch()函数用于在两个范围中找到第一对不匹配的元素。

此函数接受两个范围和一个可选的二元谓词,并返回一个pair对象,指向两个范围中第一个不匹配的元素。

用法

std::mismatch()函数的语法如下:

template< class InputIt1, class InputIt2 >
std::pair<InputIt1,InputIt2> mismatch( InputIt1 first1, InputIt1 last1, InputIt2 first2 );

template< class InputIt1, class InputIt2, class BinaryPredicate >
std::pair<InputIt1,InputIt2> mismatch( InputIt1 first1, InputIt1 last1, InputIt2 first2, BinaryPredicate p );

其中,InputIt1InputIt2都是输入迭代器类型。first1last1指定第一个范围,而first2指定第二个范围。

如果找到不匹配的元素,则返回一个pair对象,其中first指向第一个范围中的不匹配元素,而second指向第二个范围中的不匹配元素。如果两个范围相等,则返回一个pair对象,其中firstsecond都指向last1

如果提供了谓词,则将谓词应用于元素,而不是使用默认的相等比较运算符。

示例

以下是一个简单的示例,演示了如何使用std::mismatch()函数在两个容器中查找第一个不匹配的元素:

#include <iostream>
#include <vector>
#include <algorithm>

int main()
{
    std::vector<int> vec1{ 1, 2, 3, 4, 5 };
    std::vector<int> vec2{ 1, 2, 3, 6, 7 };

    auto first_mismatch = std::mismatch(vec1.begin(), vec1.end(), vec2.begin());
    if (first_mismatch.first != vec1.end())
    {
        std::cout << "First mismatch found at position " << std::distance(vec1.begin(), first_mismatch.first) << std::endl;
    }
    else
    {
        std::cout << "No mismatch found" << std::endl;
    }

    return 0;
}

输出:

First mismatch found at position 3

在上面的示例中,std::mismatch()函数在两个容器中查找第一个不匹配的元素。因为第一个容器的第四个元素与第二个容器的对应元素不匹配,所以函数返回一个pair对象,其中first指向第一个容器中不匹配的元素(即4),second指向第二个容器中不匹配的元素(即6)。

总结

std::mismatch()是一个非常有用的函数,可以帮助我们在两个范围中查找第一个不匹配的元素。使用它可以让我们更快速地比较两个容器、数组或其他序列类型。