当前位置: 首页 > news >正文

跟我学C++中级篇——STL容器的查找对比

一、C++标准库的查找

在C++的STL中,对容器或相关序列的查找中,有两种方式,一种是std::find,另外一种是std::search。而且在它们的基础上,还衍生出std::find_if、std::find_if_not、std::find_end等和std::search_n、ranges::search等。
既然都是查找,那么它们二者就会有共通之处更有不同之处,下面就对它们两个进行分析说明。

二、适用场景

std::find和std::search都是用来查找,但适用的场景有所不同。std::find用于在STL容器中查找具体一个值而std::search用来在序列中查找连续的子序列。不过,二者都支持使用谓词进行自定义的扩展,使得查找的应用更加灵活。

三、区别

std::find和std::search的区别主要包括:
1、std::find主要是查询单个值,而std::search搜索一个序列
2、两种查找的参数有所区别,前者查找值,后者查找一个范围
3、std::find的时间复杂度是O(N)而std::search是O(M)~O((N-M+1)*M),其中 N 是主序列的长度,M 是子序列的长度
4、返回值有所不同,前者返回指针目标的迭代器,后者指向子序列起始位置的迭代器

四、例程

根据上面的说明,可结合下面的例程进行分析可以更清楚的明白其应用的情况:

//find
#include <vector>
#include <algorithm>std::vector<int> vec = {10, 17, 6, 53, 100};
auto it = std::find(vec.begin(), vec.end(), 53);// index:3
if (it != vec.end()) {std::cout << "value pos: " << std::distance(vec.begin(), it);
}//search
#include <vector>
#include <algorithm>std::vector<int> mSeq = {10, 17, 6, 53, 100,6,53};
std::vector<int> sSeq = {6, 53};auto it = std::search(mSeq.begin(), mSeq.end(), sSeq.begin(), sSeq.end());// index:2
if (it != mSeq.end()) {std::cout << "Subsequence pos: " << std::distance(mSeq.begin(), it);
}

五、总结

内容是比较简单的,写这个目的在于让大家能够有对比的进行学习和分析。这种学习方法在大家上学期间就知道的,应用到C++的编程学习中,也是非常适用的。正所谓,没有对比就没有伤害,没有伤害就没有记忆。虽然编程学习中对比可能没有伤害,但的确可以增强学习的效率。与诸君共勉!

相关文章:

  • 输入顶点坐标输出立方体长宽高的神经网络
  • 进行性核上性麻痹饮食指南:科学膳食守护神经健康
  • 单位代码签名证书是什么?如何申请?
  • C++ 引用传参机制
  • Linux服务:Nginx服务重写功能
  • 【el-admin】el-admin关联数据字典
  • (undone) MIT6.S081 Lec17 VM for APP 学习笔记
  • 基于nodejs + Koa +Nuxt3的订单系统项目实战
  • 数据结构每日一题day17(链表)★★★★★
  • epic_kitchens_sounds数据集中对segment标签的处理:时间维度和特征维度的转换
  • onResume()和 onPause()的触发条件
  • 一文掌握 LVGL 9 的源码目录结构
  • 【网络入侵检测】基于源码分析Suricata的IP分片重组
  • ArcScroll: 弧形滑动控件
  • 「Mac畅玩AIGC与多模态27」开发篇23 - 多任务摘要合成与提醒工作流示例
  • 大白话解释CPU、NPU和GPU
  • C++(1):整数常量
  • 【C语言】--指针超详解(三)
  • FreeRTOS菜鸟入门(十四)·事件
  • 计算机组成:CU与ALU
  • 面对非专业人士,科学家该如何提供建议
  • 春秋航空:如果供应链持续改善、油价回落到合理水平,公司补充运力的需求将会增长
  • 两部门部署中小学幼儿园教师招聘工作:吸纳更多高校毕业生从教
  • 上海质子重离子医院二期项目启动,有望成为全世界最大粒子治疗中心
  • 杭温高铁、沪苏湖高铁明起推出定期票和计次票,不限车次执行优惠折扣
  • 超燃!走过莫斯科街头的“中国排面”