查找函数【C++】

二分查找函数

lower_bound(起始地址, 末尾地址, target):查找第一个大于等于target目标值的位置

upper_bound(起始地址, 末尾地址, target):查找第一个大于target目标值的位置

binary_search(起始地址, 末尾地址, target):查找target是否存在于数组或vector中,找到返回true,否则返回false

这三种方法都是采用的二分查找实现的函数,用于有序数组或vector等,查找效率较高,实际写题时,直接用能较少很多代码量。下面来看看示例吧:

cpp 复制代码
#include<bits/stdc++.h>

using namespace std;

int main(){
    vector<int> vec = {1,1,2,3,3,4,4,5};
    auto pos1 = lower_bound(vec.begin(), vec.end(), 2) - vec.begin();
    auto pos2 = upper_bound(vec.begin(), vec.end(), 2) - vec.begin();
    auto flag = binary_search(vec.begin(), vec.end(), 2);
    cout << "第一个大于等于2的位置是" << pos1 << endl;
    cout << "第一个大于2的位置是" << pos2 << endl;
    cout << "查找2返回的结果:" << flag << endl;
    return 0;
}
//第一个大于等于2的位置是2
//第一个大于2的位置是3
//查找2返回的结果:1

字符串查找函数

s1.find(s2):在s1字符串中查找s2,查找到返回第一个字符的位置,查找失败返回s1.npos,这个其实是一个特别标志,也可以看成一个数字,是4294967295,即s1.npos=4294967295

cpp 复制代码
#include<bits/stdc++.h>

using namespace std;

int main(){
    string s = "abcdabef";
    cout << s.find('b') << endl;
    cout << s.find("ab") << endl;
    cout << s.find("cda") << endl;
    cout << s.find("cde") << endl;
    return 0;
}

string.find()函数用法

1.返回任意字符s1在s中第一次出现的位置,s1为字符,不能为字符串 'a' "a"都可以

position=s.find_first_of(s1);

2.从字符串s下标为a开始查找字符串s1,返回起始位置 s.find(s1,a); 查找不到返回-1

相关推荐
noipp2 小时前
推荐题目:洛谷 P10907 [蓝桥杯 2024 国 B] 蚂蚁开会
c语言·c++·算法·编程·洛谷
程序员二叉3 小时前
【JUC】线程池全套深度详解|参数|流程|拒绝策略|调优|异常处理
java·开发语言·jvm·算法·面试·juc
青山木3 小时前
Hot 100 --- 轮转数组
java·数据结构·算法
徐小夕3 小时前
Loop Engineering 深度解析与实战指南(全网最全)
前端·算法·github
北域码匠4 小时前
SHA-1算法:安全哈希原理与应用解析
算法·c#·哈希算法
手写码匠5 小时前
手写 GraphRAG:从零实现图增强检索增强生成系统
人工智能·深度学习·算法·aigc
BomanGe15 小时前
NSK重载高刚性滚珠丝杠技术详解
经验分享·算法·规格说明书
Matrix_116 小时前
手机里的计算摄影:广角形变校正算法
人工智能·算法·智能手机·计算摄影
WBluuue6 小时前
数据结构与算法:有序表(二):跳表
数据结构·c++·算法·skiplist
不好听6137 小时前
深入理解链表:线性数据结构的另一面
javascript·数据结构