c++自带的查找函数详解

 更新时间:2023年09月08日 10:41:18   投稿:mrr  
这篇文章主要介绍了c++自带的查找函数,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

一、binary_search

使用binary_search查找必须是排好序的才行。使用下面三个函数都需要先排一遍序

//这三个函数都有三个参数:分别为数组的起始位置、数组的终止位置(取不到)以及要查找的目标值,
lower_bound():返回大于或等于目标值的第一个位置
upper_bound():返回大于目标值的第一个位置
//返回值为物理地址,因此要获得对应的逻辑地址,需要减去数组的起始位置。
binary_search():若目标值存在则返回true,否则返回false

可以看到,下面的numList2没有排好序,导致三个函数的返回值都是错误的。 

#include<iostream>
#include<algorithm>
using namespace std;
int main() {
	/*排好序的*/
	int numList1[5] = { 1,2,3,4,5 };
	int n1 = 2;
	/*乱序的*/
	int numList2[5] = { 1,3,2,4,5 };
	int n2 = 2;
	cout << binary_search(numList1, numList1 + 5, n1) << endl;  //true
	cout << binary_search(numList2, numList2 + 5, n1) << endl;  //false
    //返回值为物理地址,因此要获得对应的逻辑地址,需要减去数组的起始位置。
	cout << lower_bound(numList1, numList1 + 5, n1)- numList1 << endl;  //1
	cout << upper_bound(numList1, numList1 + 5, n1)- numList1 << endl;  //2
	cout << lower_bound(numList2, numList2 + 5, n1)- numList2<< endl;  //1
	cout << upper_bound(numList2, numList2 + 5, n1) - numList2 << endl;  //3
}

二、find

即便不排序也可以正常用。

数组的find

/*乱序的*/
	int numList2[5] = { 1,3,2,4,5 };
	int n2 = 2;
	int* pos = find(numList2, numList2 + 5, 2); //若找到,则返回物理地址,需要减去首地址以获得下标
	if (pos == (numList2 + 5)) {
		cout << "Couldn't find it";
	}
	else
		cout << pos - numList2; //返回下标

字符串的find 

    string str = "abcd";
	if (find(str.begin(), str.end(), 'a') != str.end())
	//使用迭代器
		cout << "Find it!";
	else
		cout << "Couldn't find it!";
// 或者
    string str = "abcd";
	cout << str.find('a');
	//返回的是下标的值而不是上面的指针或是迭代器

到此这篇关于c++自带的查找函数的文章就介绍到这了,更多相关c++查找函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • C++ 如何使用栈求解中缀、后缀表达式的值

    C++ 如何使用栈求解中缀、后缀表达式的值

    这篇文章主要介绍了C++ 使用栈求解中缀、后缀表达式的值,本文讲解了中缀、后缀表达式的求值过程以及如何将一个中缀表达式转换成后缀表达式,需要的朋友可以参考下
    2022-10-10
  • C语言中使用qsort函数对自定义结构体数组进行排序

    C语言中使用qsort函数对自定义结构体数组进行排序

    这篇文章主要介绍了C语言中使用qsort函数对自定义结构体数组进行排序,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • C语言中函数的声明、定义及使用的入门教程

    C语言中函数的声明、定义及使用的入门教程

    这篇文章主要介绍了C语言中函数的声明、定义及使用的入门教程,重点讲述了main函数的相关知识,需要的朋友可以参考下
    2015-12-12
  • C语言实现简单飞机大战

    C语言实现简单飞机大战

    这篇文章主要为大家详细介绍了C语言实现简单飞机大战,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • 基于Matlab实现嗅觉优化算法的示例代码

    基于Matlab实现嗅觉优化算法的示例代码

    嗅觉剂优化是一种新颖的优化算法,旨在模仿气味分子源尾随的药剂的智能行为。本文将利用Matlab实现这一智能优化算法,需要的可以参考一下
    2022-05-05
  • C++可调用对象callable object深入分析

    C++可调用对象callable object深入分析

    所谓的callable object,表示可以被某种方式调用其某些函数的对象。它可以是:一个函数、一个指向成员函数的指针、一个函数对象,该对象拥有operator()、一个lambda表达式,严格的说它是一种函数对象
    2022-08-08
  • 详解C语言之文件操作(上)

    详解C语言之文件操作(上)

    这篇文章主要介绍了关于C语言文件操作方法的相关资料,小编觉得这篇文章写的还不错,需要的朋友可以参考下,希望能够给你带来帮助
    2021-11-11
  • C语言运算符及其优先级汇总表口诀

    C语言运算符及其优先级汇总表口诀

    由于C语言的运算符优先级与C++的不完全一样(主要是增加了几个运算符),所以这个口诀不能完全实用于C++.但是应该能够兼容,大家可以比较一下他们的区别应该就能够很快掌握C++的优先级的
    2013-07-07
  • C++中LibCurl库的使用教程分享

    C++中LibCurl库的使用教程分享

    LibCurl是一个开源的免费的多协议数据传输开源库,该框架具备跨平台性,开源免费,这篇文章主要为大家介绍了如何在C++中使用LibCurl库,需要的可以参考下
    2023-08-08
  • C++内存序的操作方法

    C++内存序的操作方法

    在C++中,内存序(Memory Order)是一个非常重要的概念,特别是在多线程编程中,本文通过实例代码介绍C++内存序的相关知识,感兴趣的朋友一起看看吧
    2025-11-11

最新评论