|
https://blog.csdn.net/Dear_JIANJIAN/article/details/136214427
lower_bound
头文件为<algorithm>
lower_bound()用来找到>=目标数的地址
lower_bound(起始地址,结束地址,要查找的数)
lower_bound函数只能对已排好序(必须是升序)的数组进行查找;
且返回的是第一个>=目标数的地址
若没找到,返回的是最后一个元素的地址+该数组类型的字节,即所定义的数组大小
[C++] 纯文本查看 复制代码 #include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int a1[8] = { 2,56,21,45,17,5,77,9 };
sort(a1, a1 + 8, less<int>()); //按升序排序
for (int i = 0; i < 8; i++) cout << a1[i] << endl ;
//lower_bound函数返回容器中第一个值>=目标元素的位置
int* p = lower_bound(a1, a1 + 8, 45); //lower_bound函数只能在已排好序(升序)的数组查找
int* q = lower_bound(a1, a1 + 8, 100); //lower_bound函数若找到返回的是地址。
cout <<"45的地址:"<<p - a1 << endl; //返回下标
cout << "100的地址:"<<q - a1 << endl; //若没找到,返回的是最后一个下标加1,即7+1=8
return 0;
}
3.upper_bound
头文件为<algorithm>
upper_bound()用来找到>目标数的地址
upper_bound(起始地址,结束地址,要查找的数)
upper_bound函数只能对已排好序(必须是升序)的数组进行查找;
且返回的是第一个>目标数的地址
若没找到,返回的是最后一个元素的地址+该数组类型的字节,即所定义的数组大小
4.find
有说头文件为<algorithm>,但在vs的c++11标准中,单用<iostream>也行
find()函数用来找到目标数的地址
find(起始地址,结束地址,要查找的数)
find函数对不排序的数组同样适用
若找到,返回的是物理地址,所以要输出下标时需要减去首地址。
若没找到,返回的是最后一个元素的地址+该数组类型的字节,即所定义的数组大小
[C++] 纯文本查看 复制代码 #include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int a1[8] = { 2,56,21,45,17,5,77,9 };
sort(a1, a1 + 8, less<int>()); //按升序排序
for (int i = 0; i < 8; i++) cout << a1[i] << endl ;
int* p = find(a1, a1 + 8, 21); //find函数若找到返回的是地址。
int* q = find(a1, a1 + 8, 100);
cout <<"21的地址:"<<p - a1 << endl; //返回下标
cout << "100的地址:"<<q - a1 << endl; //若没找到,返回的是最后一个下标加1,即7+1=8
int a2[8] = { 2,56,21,45,17,5,77,9 }; //将a2始终乱序
int* p1 = find(a2, a2 + 8, 17); //find函数若找到返回的是地址。
int* q1 = find(a2, a2 + 8, 10);
for (int i = 0; i < 8; i++) cout << a2[i] << endl;
cout <<"17的地址:"<< p1 - a2 << endl; //返回下标
cout << "10的地址:" << q1 - a2 << endl; //若没找到,返回的是最后一个下标加1,即7+1=8
return 0;
}
|
|