内容还没有更新完欸,但自己已经学完了,还没有用熟练,不敢说自己会了
自己接下来会把知识点整理完,然后配上自己从牛客洛谷上找的STL题目供大家巩固学习.
C++
String类
1.合并性
string a = "123",b = "456";
cout << a+b << endl;
//结果:123456
2.可使用函数:insert
string a = "jiaoxuexiangzhang";
int idx = 1;//指的是元素的下标的后一个下标.
string sfl = "'akakakakak'"
a.insert(idx,sfl);
cout << a << endl; // 结果:ji'akakakakak'aoxuexiangzhang
3.
lower_bount 和 upper_bound
设一个数组 int a[n] ; a是元素名,n是数组的大小.
- lower_bound(a,a+n,x)返回数组a[0]~a[n-1]中,大于等于x的数中,最小的数的指针.因为指针可以通过加减算偏移量,所以再减去数组名a,就可以得到对应的下标
下标 ::: 0 1 2 3 4 5
int a[6] = {1,3,5,6,6,7};
int b[6] = {1,1,1,1,1,2};
cout << lower_bound(a,a+6,3) - a << endl;//输出:1
cout << lower_bound(b,b+6,3) - b << endl;//输出:6
但一定要注意,函数中的两个数组a,b都必须是递增的
如果函数中没有大于等于x的数,则会返回数组的大小
- upper_bound,
设数组a并且数长度是n,upper_bound(a,a+n,x)返回数组a[0]~a[n-1]中大于x的数中,最小的数的指针.
** 注意:lower_bound是”>= “, upper_bound是 “>” ;
下标 :: 0 1 2 3 4 5
int a[6] = {1,3,5,6,6,7};
int b[6] = {1,1,1,1,1,2};
cout << upper_bound(a,a+6,3) - a << endl;//输出:2
cout << upper_bound(b,b+6,3) - b << endl;//输出:6
sort排序
sort(begin(),end(),cmp); 括号里的第一个内容是:第一个元素的指针,第二个内容是:最后一个元素的下一个元素的指针,就是已经越界的. 而cmp就是重点了,这一项就是排序规则.
对于cmp,如果不写这一项就默认是从小到大开始排序,如果想倒过来,就把cmp改成 >> greater< int >(); 其中里面的int项也可以改成double,float等等,跟类型有关.
int main()
{
int a[4] = {4,5,1,3};
sort(a,a+4);
for(int x : a) cout << x << " ";
cout << endl;
sort(a,a+4 , greater<int>());
for(int x : a )cout << x << " ";
}
还有就是分享一道蓝桥的题目,如果利用好了cmp,那么就可以几行解决掉
https://www.lanqiao.cn/problems/17035/learning/?contest_id=177
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool cmp(string s1,string s2)
{
return s1 + s2<s2 + s1;//为了保证不同长度的字符串的正常比较
}
int main() {
int N;
cin >> N;
vector<string> a(N);
for (int i = 0; i < N; ++i) {
cin >> a[i];
}
sort(a.begin(),a.end(),cmp);
for (string x : a) {
cout<<x;
}
return 0;
}