1.lower_bound()函数:
给定一个数组,输入目标值,该函数查找第一个大于或等于该值的地址,用这个地址减去第一个地址,得到的就是第一个大于等于目标值的值的下标。
从小到大存入数组v:
vector<int>v;
v.push_back(1);
v.push_back(1);
v.push_back(4);
v.push_back(5);
如果要查找第一个大于等于2的值的下标
int vv =lower_bound(v.begin(), v.end(), 2)-v.begin();
/****输出****/
2
若要查找的数的大小超过了原数组最大值,则直接插入数组下一个地址
int vv =lower_bound(v.begin(), v.end(), 6)-v.begin();
cout<<vv;
/****输出****/
4
如果要查找第一个大于等于2的值
int v2 = *lower_bound(v.begin(), v.end(), 3);
cout<<v2;
/****输出****/
4
2.upper_bound()函数:
给定一个数组,查找第一个大于给定值的值的地址:
查找第一个大于2的值的下标
int aa = upper_bound(v.begin(), v.end(), 2) - v.begin();
cout<<aa;
/****输出****/
2
如果要查找的值大于或等于数组里的最大值时,直接将这个要查找的值插入到数组中:
int aa = upper_bound(v.begin(), v.end(), 5) - v.begin();
cout<<aa;
/****输出****/
4
3.string中的find函数
用于寻找字符串中某个字符的下标,如果存在下标,返回下标,如果不存在下标返回-1。
rfind()函数:从字符串右边开始查找
#include<iostream>;
#include<algorithm>
using namespace std;
int main()
{
string a = "wydwrgwflbb";
int k1 = a.find('l');//查找字符串中字符为l的
int k2 = a.find('b');//返回查找到的第一个b的下标
int k3 = a.find('z');//不存在,返回-1
int k4 = a.find('w', 4);//从下标4(包括4)开始找
int k5 = a.rfind('f');//从右边开始找
int k6 = a.rfind('w', 5);//从右边数第6个开始找
cout << k1 << endl << k2<< endl << k3<<endl<<k4<<endl<<k5<<endl<<k6;
return 0;
}
/****输出****/
8
9
-1
6
7
3