📅  最后修改于: 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 );
其中,InputIt1
和InputIt2
都是输入迭代器类型。first1
和last1
指定第一个范围,而first2
指定第二个范围。
如果找到不匹配的元素,则返回一个pair对象,其中first
指向第一个范围中的不匹配元素,而second
指向第二个范围中的不匹配元素。如果两个范围相等,则返回一个pair对象,其中first
和second
都指向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()
是一个非常有用的函数,可以帮助我们在两个范围中查找第一个不匹配的元素。使用它可以让我们更快速地比较两个容器、数组或其他序列类型。