c++自带的查找函数

一、binary_search

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

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

binary_search():若目标值存在则返回true,否则返回false

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

#include
#include
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++,算法,开发语言)