C++常用STL用法总结详解(vector、stack、queue、map、string、list、set)

vector

vector<int> v; //一维
vector<int> vt(100); //指定长度,适用于已知个数,可以直接cin>>vt[i]
vector<int> vt1(100,1); //指定长度并进行初始化,非常好用 
vector<vector<int> > v2; //二维
vector<int> v22[100]; //二维,第一维已知,非常适合作为邻接表
v.push_back(1); //插入到最后
v[0]; //取v中的值
v.front(); //返回v数组第一个元素的值
v.back(); //返回v数组最后一个元素的值
v.pop_back(); //删除最后一个元素
int k=1,a=1;
v.erase(v.begin()+k);//删除下标为k的数,返回下一个位置的下标,必须用迭代器
v.insert(v.begin()+k,a); //将数字a插入到指定位置k
v.insert(v.begin()+k,5,a); //5个数字a插入到指定位置k
sort(v.begin(), v.end()); //快排
sort(v.begin(),v.end(),greater<int>());//降序快排
v.erase(unique(v.begin() , v.end()), v.end()); //去重,在此之前要先排序
reverse(begin(v), end(v)); //实现逆序,原地更改
is_sorted(v.begin(), v.end()); //是否非递减
v.resize(10); //重新指定大小,适用于v先定义为全局变量,main中通过输入才得知大小
cout<<accumulate(v.begin(), v.end(), 0); //0开始计算总和,numeric头文件

stack

stack<int> s;
s.push(1); //入栈
cout<<s.top()<<endl;//取栈顶元素,不出栈
s.pop();//出栈,不返回值

queue

queue<int> q;
q.push(1); //入队
q.pop(); //出队,不返回值
q.front(); //取队头元素,不出队
q.back(); //取队尾元素,不出队

priority_queue

priority_queue<int> maxQ;//大顶堆
priority_queue<int,vector<int>,greater<int> > minQ;//小顶堆
maxQ.push(1);//入堆
cout<<maxQ.top()<<endl;//取堆顶元素,不出堆
maxQ.pop();//出堆,不返回值

map

map<int,int> m;
m.insert(pair<int,int>(1,2));//字典的插入方法1
m[2]=3;//字典的插入方法2,建议这样用
map<int,int>::iterator iter=m.find(1);//在字典中查找某一元素
if(iter!=m.end()) {
    
    
	cout<<iter->second;//找到了
}
m.erase(iter);//删除
for(auto iter=m.begin(); iter!=m.end(); iter++) //遍历,iter用auto类型
	cout<<iter->first<<' '<<iter->second<<endl; //获取键first-值second

unordered_map

unordered_map<int, int> um;
um[0]=1; //插入
if(um[2]) {
    
     //查找
	cout<<um[2];
}

string

string str2="abc";
str2+="d";//直接用加号进行字符串连接
str2.substr(2,1);//取子串,两个参数分别为:start,length;不写length就是到结束
str2.find("ab",1); //从下标1开始,查找子串"ab"的位置,没找到则为string::npos
str2.length(); //字符串长度
str2.size() ; //字符串的长度
str2.c_str(); //转换为C语言中的char[]
sort(str2.begin(), str2.end()); //字符串sort排序
//字符串转换成其他格式:#include<string> stoi() stod() stof() stol() stold() stoll() stoul() stoull()
//其他格式转换成字符串:to_string()
str2.erase(str2.begin()+1); //移除指定位置的字符
str2.insert(0,10,'0'); //在字符串指定位置增加10'0'字符,不需要迭代器
str2.erase(0,3); //删除下标0开始的共3个字符
str2.pop_back(); //删除最后一个字符

list

list<int> l;
l.push_back(1);
l.push_back(5); //插入到最后
l.push_front(0); //插入到最前
list<int>::iterator iter2;//也可以用auto,注意iter是指针可以++
for(iter2 = l.begin(); iter2 != l.end(); iter2++) {
    
    
	cout <<*iter2 << endl; //遍历
}
l.insert(iter2,3); //在指定位置插入
l.erase(iter2); //在指定位置删除
l.sort(); //排序

set

set<int> set1 {
    
    0,1,2}; //可以在定义时赋初值
set1.insert(3); //向集合中插入数据
set1.size();  //获取集合大小
set1.erase(3); //按值删除
set1.erase(set1.begin()) ; //按位置删除
set1.find(5)!=set1.end(); //查找某一元素是否在集合中
for(auto it=set1.begin(); it!=set1.end(); it++) {
    
    
	cout<<*it<<endl; //获取每一个元素值
}
set1.clear(); //清空

猜你喜欢

转载自blog.csdn.net/qq_41112170/article/details/126774483