, "pear", "banana", "zoops" };
pair<char **, char **> result2 = mismatch(str1, str1 + 4, str2, StrEqual);
if (result2.first != str1 + 4 && result2.second != str2 + 4)
{
// 成立则说明两个str子串有不同的地方,并输出他们之间的不同点
cout << "str1 = > " << str1[result2.first - str1] << endl << endl;
cout << "str2 = > " << str2[result2.second - str2] << endl;
}
system("pause");
return 0;
}
7.12 元素相等的判断
Equal 算法函数,用于判断两个序列是否在元素值上相等。equal函数的用法如下:
template<class InputIterator1, class InputIterator2>
bool equal(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2);
其中,first1、last1
是迭代器,表示第一个序列的范围;first2
是迭代器,表示第二个序列的起始位置。调用equal
函数后,将会在[first1, last1]
区间和以first2
为起始位置的序列进行元素值的逐一比较,若两个序列中对应元素的值都相等,则函数返回true,否则函数返回false。
该算法实现逐一比较两个序列的元素是否相等,该函数不返回迭代器,如下则是一段演示案例;
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool absEqual(const int x,const int y)
{
return (x == abs(y) || abs(x) == y) ? 1 : 0;
}
int main(int argc, char* argv[])
{
vector<int> var1;
vector<int> var2;
// 初始化向量
for (unsigned int x = 0; x < var1.size(); x++)
{
var1[x] = x;
var2[x] = -1 * x;
}
// 判断v1和v2元素的绝对值是否完全相等
if (equal(var1.begin(), var1.end(), var2.begin(), absEqual))
{
cout << "完全相等" << endl;
}
system("pause");
return 0;
}
7.13 子序列搜索算法
Search 算法函数,用于在一个序列中查找另一个子序列。search函数的用法如下:
template<class ForwardIterator1, class ForwardIterator2>
ForwardIterator1 search(ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2);
其中,first1、last1
是迭代器,表示待查找的序列的范围;first2、last2
是迭代器,表示要查找的子序列的范围。调用search
函数后,将会在[first1, last1]
区间中查找第一个与[first2, last2]
相匹配的子序列,并返回距离区间开始点最近的元素的迭代器,如果没有找到匹配的子序列,将返回last1。
该算法实现了在一个序列中搜索与另一个序列匹配的子序列,如下则是一段演示案例;
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(int argc, char* argv[])
{
vector<int> var1 = { 5, 6, 7, 8, 9 };
vector<int> var2 = { 7, 8 };
// 检查var2是否构成var1的子序列
vector<int>::iterator it;
it = search(var1.begin(), var1.end(), var2.begin(),var2.end());
if (it != var1.end())
{
// 输出var2元素包含在var1中,的起始元素为
cout << "Offset = " << it - var1.begin() << endl;
}
system("pause");
return 0;
}
7.14 重复元素子序列搜索
Search_n 算法函数,用于在一个序列中查找连续n个符合条件的元素。search_n函数的用法如下:
template<class ForwardIterator, class Size, class T, class BinaryPredicate>
ForwardIterator search_n(ForwardIterator first, ForwardIterator last, Size count, const T& value, BinaryPredicate pred);
其中,first、last
是迭代器,表示待查找的序列的范围;count
表示需要匹配的元素个数;value
表示需要匹配的元素值;pred
为一个谓词函数,用于指定匹配方式。调用search_n
函数后,将会在[first, last]
区间中查找是否有count
个连续的value
元素,并返回指向第一个符合条件的元素位置的迭代器。如果没有找到符合条件的元素,将返回last。
该算法搜索序列中是否有一系列元素值均为某个给定值得子序列,如下则是一段演示案例;
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(int argc, char* argv[])
{
vector<int> var1 = { 5, 6, 7, 8,8,8,9 };
// 查找var1中存在三个连续是8的数据
vector<int>::iterator it;
it = search_n(var1.begin(), var1.end(), 3, 8);
if (it != var1.end())
{
cout << "var1中存在三连8" <<