string
头文件 #include
直接支持流式读写 cin cout
定义
string s;
赋值
string s(“123”);
string s(5,‘a’); “aaaaa”
string s(“123456”,3); “123”
string s(“123456”,2,4); “3456”
可以像整数一样“相加”(末尾添加)
s.append(“456”);
s+=“456”;
末尾添加字符
s.push_back(‘4’);
迭代器
<迭代器名称>string::iterator it;
首位置 s.begin();
cout<<(*it)<<endl;
it++;
it=s.end();末尾后一位 ( 左闭右开)
遍历
for(it=s.begin();it!=s.end();it++) auto it=s.begin();
for(int i=0;i<s.length();i++){
cout<<i<<": "<<s[i]<<endl;
}
初始化 s.clear();
int p=s.find(“123”);
找目标字符位置{
string s2(“111123451”);
int p=-1;
while(s2.find(“1”,p+1)!=-1){
p=s2.find(“1”,p+1);
cout<<p<<endl;
}}
删除
s.erase(s.begin());
s.erase(s.begin(),s.begin()+3);
vector 动态数组(不定长数组) 内存连续
vector<数据类型>a;
vector<vector<数据类型>>a;(二维数组)
vectorv2(2);
vectorv3({1,2,3,4,5});
vectorv4(v3);
大小 v.size();
改变大小 v.resize();
删除最后一个元素v.pop_back()
下标访问v[i];
尾部添加v.push_back(7);
v.empty();true / false;
首v.front() 尾v.back();
v.begin(); v.end();
for(int(类型) x:v)
{
cout<<x<<endl;
}
queue 队列 ,先进先出(FIFO)
queuequ;
添加qu.push(1);
删qu.pop();
不支持下标
出队
while(qu.size()){
cout<<qu.front()<<endl;
qu.pop();
}
stack 栈,先进后出(FILO)
stackst;
st.push(1);
while(st.size()){
cout<<st.top()<<endl;
st.pop();
}
set 集合,元素有序排列,不重复
setse;
常用函数insert() erase() find() size() clear() count()
lower_bound(x):大于等于x的第一个元素位置,不存在返回end()
upper_bound(x):大于x的第一个元素的位置,不存在返回end()
erase()指向下一个:(删除奇数)
for(auto it=se.begin();it!=se.end()😉
{
if((*it)%2==1)
it=se.erase(it);
else
it++;
}
map
字典,映射,key-value键值对,按key有序排列
map<类型,类型>mp;
常用函数 erase() find() size() clear() count()
lower_bound() upper_bound()
可通过下标访问
for(auto it=mp.begin();it!=mp.end();it++){
cout<<(it->first)<<" "<<(it->second)<<endl;
}
list
双向链表,内存不连续
listli;
常用函数 push_back() push_front() pop_back() pop_front() insert() erase()
不支持随机访问
sort排序 #include
for(int i=1;i<=n;i++)
{
x[i]=rand()%100+1;
}
sort(x+1,x+1+n);
sort(x+1,x+1+n,cmp);
bool cmp(int a,int b)
{
return a>b;
}
sort(x+1,x+1+n,[](int a,int b)
{
if(a%2==b%2)return a<b;
return a%2>b%2;
});
struct node{
int a;
string s;
}a[MAXN];
bool cmp(node a,node b)
{
if(a.a!=b.a)return a.a<b.a;
return a.s<b.s;
}
sort(a+1,a+1+n,cmp);
struct node{
int a;
string s;
bool friend operator<(node a,node b)
{
if(a.a!=b.a)return a.a<b.a;
return a.s<b.s;
}
}a[MAXN];
bool cmp(node a,node b)
{
if(a.a!=b.a)return a.a<b.a;
return a.s<b.s;
}
sort(a+1,a+1+n);
vectorve;
sort(ve.begin(),ve.end());
reverse
翻转数组、容器
int x[1005];
reverse(x+1,x+1+n);
vectorve;
reverse(ve.begin(),ve.end());