设为首页 加入收藏

TOP

7.1 C++ STL 非变易查找算法(六)
2023-08-26 21:10:33 】 浏览:216
Tags:7.1 STL 易查找
, "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" <<
首页 上一页 3 4 5 6 下一页 尾页 6/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇4.2 C++ Boost 内存池管理库 下一篇C语言转义字符详解

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目