STL小结
- 只有vector和string支持v.begin()+3这种迭代器加上整数的写法
vector
- 常见STL容器中只有vector和string支持
v.begin()+3
这种迭代器加上整数的写法 v.size(),v.empty()
时间复杂度为O(1)v.insert(it,x)
在迭代器位置处插入元素v.erase(it)
删除迭代器处的元素v.erase(v.begin()+2,v.begin()+6)
删除左闭右开区间内的元素
vector<int> vec{1,2,3,4,5};
vector<int> vec(5);
vector<int> vec(10, 1);
reverse(v.begin(),v.end())
string
getline(cin,str)
直到换行才结束getline(cin,str,'q')
直到遇到’q’才结束str1.insert(str1.begin(),str2.begin(),str2.begin()+4)
,三个参数,插入位置,截取的区间str.erase(str.begin())
删除单个元素str.erase(first,last)
删除区间str.erase(pos,length)
起始位置,长度str.substr(pos,len)
返回pos号位,长度为len的子串str.find(str2))
返回第一次出现位置,unsigned long型str.insert(it,'p')
插入str.replace(3,2,"good")
3号位开始,连续两个字符替换成”good",即“ab"—>“good”str.find(str2)
sting s,char ch[20];s=ch
string和char[]的直接赋值
set
st.insert(3)
插入3st.find(value)
返回迭代器st.erase(it),st.erase(value),st.erase(first,last)
在元素外面定义比较函数
struct cmp{
bool operator() (const int& a,const int& b){
return a<b;
}
}
set<int, cmp> st;
若元素本身是结构体:
struct node{
int a,b;
bool operator < (const node& aa){
return aa.b<b;
}
}
multiset
- 删除为删除所有值为value的元素,并返回删除个数
map
- key,value,it->first,it->second
it=mp.find(key)
mp.erase(it),erase(key),erase(first,last)
- 同set可自定义比较规则,map<int,chat,cmp> mp;
multimap
m.insert(pair<string,int>("sad",34))
或者直接m["sad"]=34
- 删除同multiset是删除全部key下的值
priority_queue
priority_queue<int,vector<int>,less<int> > que
其中vector用来承载底层的堆结构,less<int>
大数在前,greater<int>
小数在前- 或者结构体内重载运算符< , >定义比较规则
- 或者函数外面重载()自定义比较规则
struct cmp{
bool operator () (const int& a,const int& b){
return a<b;
}
}
priority_queue <int,cmp> que;
pair
#include <utility>或<map>
- 比较规则:先比较第一个元素,再比较第二个元素
mp.insert(make_pair("adf",12))
;或者mp.insert(pair<string,int>("fas",32));
next_permutation和prev_permutation
int a[3]={1,2,3};
do{
cout<<a[0]<<a[1]<<a[2]<<endl;
}while(next_permutation(a,a+3));
123
132
213
231
312
321
若改为perv_permutation 则从321开始
binary_search(a,a+10,5)
lower_bound(first,last,value)和upper_bound
- 一个返回第一个大于等于的指针,一个是大于的指针,要求有序
nth_element找第k大的元素
int a[6]={2,3,1,4,6,5};
nth_element(a,a+2,a+6);
for(int i=0;i<6;i++)cout<<a[i];
21’3‘465,3左边均比3小,右边均比3大
- O(n)复杂度,三个参数,nth_element(first,nth,last,cmp);,可自定义比较函数(类似sort的写法)