C++ search()函数用法详解(深入了解,一文学会)

find_end() 函数用于在序列 A 中查找序列 B 最后一次出现的位置。那么,如果想知道序列 B 在序列 A 中第一次出现的位置,该如何实现呢?可以借助 search() 函数。

search() 函数定义在<algorithm>头文件中,其功能恰好和 find_end() 函数相反,用于在序列 A 中查找序列 B 第一次出现的位置。

本文作者原创,转载请附上文章出处与本文链接。

C++ search()函数用法详解(深入了解,一文学会)目录

1 search()语法格式

2 search() 示例

2.1 第一种语法格式

2.2 第二种语法格式        第二种语法自定义规则,不做介绍因为感觉有点鸡肋。


1 search()语法格式

        和 find_end() 相同,search() 函数也提供有以下 2 种语法格式:

//查找 [first1, last1) 范围内第一个 [first2, last2) 子序列
ForwardIterator search (ForwardIterator first1, ForwardIterator last1,ForwardIterator first2, ForwardIterator last2);
//查找 [first1, last1) 范围内,和 [first2, last2) 序列满足 pred 规则的第一个子序列
ForwardIterator search (ForwardIterator first1, ForwardIterator last1,ForwardIterator first2, ForwardIterator last2,BinaryPredicate pred);

其中,各个参数的含义分别为:

  • first1、last1:都为正向迭代器,其组合 [first1, last1) 用于指定查找范围(也就是上面例子中的序列 A);
  • first2、last2:都为正向迭代器,其组合 [first2, last2) 用于指定要查找的序列(也就是上面例子中的序列 B);
  • pred:用于自定义查找规则。该规则实际上是一个包含 2 个参数且返回值类型为 bool 的函数(第一个参数接收 [first1, last1) 范围内的元素,第二个参数接收 [first2, last2) 范围内的元素)。函数定义的形式可以是普通函数,也可以是函数对象。

实际上,第一种语法格式也可以看做是包含一个默认的 pred 参数,该参数指定的是一种相等规则,即在 [first1, last1) 范围内查找和 [first2, last2) 中各个元素对应相等的子序列;而借助第二种语法格式,我们可以自定义一个当前场景需要的匹配规则。

同时,search() 函数会返回一个正向迭代器,当函数查找成功时,该迭代器指向查找到的子序列中的第一个元素;反之,如果查找失败,则该迭代器的指向和 last1 迭代器相同。

2 search() 示例

#include <iostream>     // std::cout
#include <algorithm>    // std::search
#include <vector>       // std::vector
using namespace std;//以普通函数的形式定义一个匹配规则
bool mycomp1(int i, int j) {return (i % j == 0);
}//以函数对象的形式定义一个匹配规则
class mycomp2 {
public:bool operator()(const int& i, const int& j) {return (i % j == 0);}
};int main() {vector<int> myvector{ 1,2,3,4,8,12,18,12,18,1,2,3 };int myarr[] = { 12,18,1 };//调用第一种语法格式vector<int>::iterator it = search(myvector.begin(), myvector.end(), myarr, myarr+3);if (it != myvector.end()) {cout << "第一个{12,18,1}的起始位置为:" << it - myvector.begin() << "  ,*it = " << *it << endl;}int myarr2[] = { 18,1,2 };//调用第二种语法格式it = search(myvector.begin(), myvector.end(), myarr2, myarr2 + 3, mycomp2());if (it != myvector.end()) {cout << "第一个{18,1,2}的起始位置为:" << it - myvector.begin() << "  ,*it = " << *it;}return 0;
}

2.1 第一种语法格式

下面有两个示例:

示例1: 通过程序的执行结果可以看到,search() 函数找到了 myvector 容器中第一个 {1,2,6},起始位置下标为9,可以通过 myvector容器下标9、10、11来找到对应的1,2,6。

示例2:  通过程序的执行结果可以看到,search() 函数找到了 myvector 容器中第一个 {11,1,2},起始位置下标为8,可以通过 myvector容器下标8、9、10来找到对应的11,1,2。

示例3:如果未找到则不进行返回

#include <iostream>     // std::cout
#include <algorithm>    // std::search
#include <vector>       // std::vector
using namespace std;int main() {vector<int> myvector{ 1,2,3,4,8,12,18,12,18,1,2,6 };int myarr[] = { 1,2,6 };//调用第一种语法格式vector<int>::iterator it = search(myvector.begin(), myvector.end(), myarr, myarr+3);if (it != myvector.end()) {cout << "第一个{1,2,6}的起始位置为:" << it - myvector.begin() << "  ,*it = " << *it << endl;}return 0;
}

#include <iostream>     // std::cout
#include <algorithm>    // std::search
#include <vector>       // std::vector
using namespace std;int main() {vector<int> myvector{ 1,2,3,4,8,12,18,12,11,1,2,6 };int myarr[] = { 11,1,2 };//调用第一种语法格式vector<int>::iterator it = search(myvector.begin(), myvector.end(), myarr, myarr+3);if (it != myvector.end()) {cout << "第一个{11,1,2}的起始位置为:" << it - myvector.begin() << "  ,*it = " << *it << endl;}return 0;
}

    //不返回值int myarr[] = { 1,2,100 };//调用第一种语法格式vector<int>::iterator it = search(myvector.begin(), myvector.end(), myarr, myarr + 3);if (it != myvector.end()) {cout << "第一个{11,1,2}的起始位置为:" << it - myvector.begin() << "  ,*it = " << *it << endl;}

2.2 第二种语法格式
        第二种语法自定义规则,不做介绍因为感觉有点鸡肋。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1382111.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

如何让你的 Win10 任务栏全透明?

Windows7有系统自带的任务栏透明&#xff0c;但Windows10没有&#xff0c;怎么办呢&#xff1f;没关系&#xff0c;我们用下面这款软件就可以啦&#xff0c;就在微软商店里面&#xff0c;可以免费下载。 配合自动隐藏任务栏食用更佳 最后再关掉小娜&#xff0c;我们来看看效果…

win10 怎么把任务栏变透明

win10系统任务栏颜色重&#xff0c;看起来十分不舒服&#xff0c;那么怎样增加它的透明度呢&#xff1f;一起来看具体步骤&#xff1a; 1.进入设置—>个性化—>颜色&#xff0c;开启“透明效果”选项。 2.按win R&#xff0c;打开运行&#xff0c;输入“regedit”&…

Win10 任务栏透明工具-TranslucentTB

之前比较痴迷Win10系统的美化_||&#xff0c;也找到了好多很好用的小工具&#xff0c;对于Win10的任务栏&#xff0c;一直在尝试让他透明化&#xff0c;&#xff08;深色壁纸还好&#xff0c;浅色壁纸简直不能忍。。&#xff09;&#xff0c;也试过startisback等等软件&#xf…

win10 任务栏全透明,一键设置(translucentTB)

方式1&#xff1a; 通过系统个性化设置任务栏为透明&#xff0c;但此方法可能行不通&#xff0c;就算设置成功了也是只有50%的透明度 要使任务栏全透明&#xff0c;只能采用方式2&#xff0c;使用软件translucentTB 方式2 可以实现win10任务栏全透明的工具&#xff1a; 链接…

android设置透明状态栏

在写这篇文章之前也看过很多大牛的博客&#xff0c;但是大多数都写的比较深奥和跳跃 而且网上还有很多对于透明状态栏及沉浸式状态栏的争论&#xff0c;简直看的头晕眼花 在此我用专业菜鸟的术语给大家解释一下&#xff1a; 沉浸式状态栏&#xff1a;就是你看视频&#xff08…

Win10任务栏透明,3个超好用解决方法!

案例&#xff1a;win10任务栏透明怎么办&#xff1f; 【我的电脑不知道为什么任务栏突然就变透明了&#xff0c;现在不知道该如何解决&#xff0c;遇到这种情况应该怎么办呀&#xff1f;】 Win10任务栏是Windows 10操作系统的一部分&#xff0c;通常默认为不透明。然而&#…

win11更新后Translucent TB 任务栏透明失效

不废话直接步骤 1.下载ViVeTools 下载 2.选择ViVeTools.zip 解压 3.在解压目录下以管理员打开CMD 4.查询26008830 ID的状态 ViVeTool.exe /query关闭为 disabled 开启为 enabled (需要设置为关闭) 5.关闭命令 ViVeTool.exe /enable /id:26008830 /variant:26.重启

Windows11任务栏无法透明化解决办法

Windows11家庭版停止系统更新 你可以选择停或是不停&#xff0c;下次更新可能就把任务栏又给整不能透明了 修改注册表 对于运行Windows11家庭版的用户&#xff0c;没有组策略编辑器&#xff0c;但可以使用注册表停止自动更新。 注意&#xff1a;错误地修改注册表可能会对您…

win10如何使任务栏全透明

> 学习汇总&#xff08;持续更新&#xff09; > 从零搭建后端基础设施系列&#xff08;一&#xff09;-- 背景介绍 首先需要用到一款软件,名字是StartIsBack 附上百度云地址: 链接&#xff1a;http://pan.baidu.com/s/1hrTGFAk 密码&#xff1a;lr6e 安装过程很简单&…

win10透明任务栏教程

win10透明任务栏教程 虽然win10秋季创意者更新加入了毛玻璃效果&#xff0c;但我们又怎么能就此满足&#xff0c;张科技今天带领大家体验一下完全透明的win10任务栏&#xff1a; 首先需要一款软件&#xff0c;名为 StartIsBack&#xff0c;回复【任务栏】获取下载地址&#x…

win10系统任务栏透明方法

win10任务栏透明 很多用了TranslucentTB或者StartIsBack的朋友都应该或多或少对这两款软件的缺陷保有遗憾&#xff0c;前者虽然适用于各个Windows版本、绿色小巧&#xff0c;但效果却不大理想&#xff0c;后者虽然效果完美&#xff0c;但必须随着Windows更新不断升级版本否则会…

win10任务栏全透明

一个可以实现win10任务栏全透明的工具&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1LSgxGAZxxuxE3rC3_L7fTg 密码&#xff1a;51dz。用VS2017打包的程序&#xff0c;使用方法是安装完打开&#xff0c;在任务栏点击程序图标可以选择不同的功能。效果如下&#xff1a; …

计算机管理设置透明,教你把win10任务栏透明设置

有时候我们看到别人电脑win10系统的任务栏的透明的&#xff0c;看起来很有个性&#xff0c;觉得非常好看&#xff0c;想要给自己的电脑的win10系统设置下&#xff0c;如何操作呢&#xff1f;下面跟随小编分享的教程操作一下&#xff0c;快速帮你把win10任务栏设置透明。 经常给…

TranslucentTB状态栏图标隐藏及恢复,windows状态栏透明美化

TranslucentTB设置隐藏图标及恢复&#xff0c;windows状态栏美化神器 安装Translucent后&#xff0c;打开应用可以在状态栏看到translucenttb的图标高级设置&#xff0c;隐藏图标 安装Translucent后&#xff0c;打开应用可以在状态栏看到translucenttb的图标 在TranslucentTB的…

EMC传导干扰滤波电路设计

1.EMC概念 2.EMC 传导干扰详解 EMC传导滤波电路的设计--传导干扰详解 3.EMC 传导干扰的测量方法 4.EMC 滤波电路设计 5.浪涌抑制电路设计 6.开关电源的安全要求 7.当前开关电源灯的应用

Win10任务栏100%透明怎么设置

许多用户在使用电脑的时候都会为电脑进行一些美化设置&#xff0c;其中就包括了任务栏的透明度的设置&#xff0c;而不少用户在使用Win10系统的时候想要把任务栏设置成100%透明&#xff0c;那么具体怎么操作呢&#xff1f;下面我就带着大家一起具体来看看怎么操作吧&#xff01…

Win10任务栏调为透明状态

1. 先设置透明效果。 wini&#xff0c;打开Windows设置&#xff0c;点击个性化&#xff0c;点击颜色&#xff0c;将透明效果打开。 2.winr&#xff0c;输入【regedit】 在路径: 【计算机\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced】…

windows11任务栏全透明

颜色设置 1、打开windows设置&#xff0c;搜索颜色 2、选择个性化&#xff0c;右侧选择颜色&#xff08;主题色、透明效果、颜色主题&#xff09; 3、选择模式&#xff0c;选择自定义&#xff0c;选择你的默认windows模式&#xff0c;选择深色&#xff0c;选择默认应用模式&a…

Win11任务栏怎么透明?Win11任务栏全透明设置教程

Win11任务栏怎么透明&#xff1f;微软推出新的Win11系统已经很久了&#xff0c;不少用户在下载安装之后觉得任务栏颜色不好看想要设置成透明的&#xff0c;但是又不知道具体怎么操作&#xff0c;下面小编就带着大家一起学习一下任务栏设置透明的方法吧&#xff01; 更多系统教…

136.只出现一次的数字+26.删除有序数组中的重复项

目录 一、136.只出现一次的数字 二、代码 三、26删除有序数组中的重复项 四、代码 一、136.只出现一次的数字 136. 只出现一次的数字 - 力扣&#xff08;LeetCode&#xff09; 二、代码 交换律&#xff1a;a ^ b ^ c <> a ^ c ^ b 任何数与0异或为任何数 0 ^ n >…