1.upper_bound(起始地址,结束地址,要查找的数值) 返回的是大于val的第一个元素位置。(区间为前闭后开,找不到则返回last,二分查找)
2.lower_bound(起始地址,结束地址,要查找的数值) 返回的是大于或等于val的第一个元素位置。(区间为前闭后开,找不到则返回last,二分查找)
3.binary_search(起始地址,结束地址,要查找的数值) 返回的是是否存在这么一个数,是一个bool值。(二分查找)
int arr[10]={0,1,2,3,4,5,6,7,8,9};
int t1=upper_bound(arr,arr+10,4)-arr;
int t2=lower_bound(arr,arr+10,4)-arr;
bool t=binary_search(arr,arr+10,4);
cout<<"upper_bound:"<<t1<<endl;
cout<<"lower_bound:"<<t2<<endl;
cout<<"binary_search:"<<t<<endl;
4.tolower() 字母转换为小写
5.toupper() 是字母转换为大写
6.strA.find(strB) != string:npos 查找字符串strA是否包含子串strB
(其中string:npos是个特殊值,说明查找没有匹配)
string s1="abcdefghijklmn";
string s2="efg";
string s3="xyz";
cout<<(s1.find(s2)==string::npos ? "没找到" : "找到了")<<endl;
cout<<(s1.find(s3)==string::npos ? "没找到" : "找到了")<<endl;
7.reverse(起始地址,结束地址)
string s1="abcdefghijklmn";
cout<<"反转前:"<<s1<<endl;
reverse(s1.begin(),s1.end());
cout<<"反转后:"<<s1<<endl;
8.isalnum() 判断一个字符是否为字母或者数字,是isdigit()和isalpha()的结合
9.insert() 在字符串中插入字符串或字符
string str("hello nihao");
//在下标为4的位置,插入字符串potatao
str.insert(6,"potato ");
cout << str << endl;
str.insert(6,5,'h');
//在下标为6的位置,插入字符串5个字符h
cout << str << endl;
10.max_element()和min_element()
寻找容器中的最大值或最小值(返回的是迭代器,所以输出值的话要在前面加 *)
第三个参数cmp可写可不写, max_element() 和 min_element() 默认是从小到大排列,max_element() 输出最后一个值, min_element() 输出第一个值,但是如果自定义的 cmp 函数写的是从大到小排列,那么会导致 max_element() 和min_element() 的两个结果对调
可以用于 vector[], int arr[] ,string arr[]
int arr[10]={19,18,17,16,15,14,13,12,11,10};
cout<<"最大值:"<<*(max_element(arr,arr+10))<<endl;
cout<<"最小值:"<<*(min_element(arr,arr+10))<<endl;
11.erase() (string中的用法)
string a="abcdefg";
string b="abcdefg";
string c="abcdefg";
a.erase(3); //删除3号索引及后面的字符
b.erase(b.begin()+3); //删除3号索引处的字符
c.erase(3,2); //删除3号索引开始往后的2个字符
cout<<a<<endl<<b<<endl<<c<<endl;
12.sscanf和sprintf
char c[50] = "123";
int a;
sscanf(c, "%d", &a); // 不要忘记 “&”
int b = 567;
sprintf(c, "%d", b);
cout << a << endl << c;
//sscanf将字符数组转换为数字,输入到数字变量中
//sprintf将数字转换为字符数组,输出到字符数组变量中