文章目录
- 学习链接
- 1. list 代码测试
- 2. stack 代码测试
- 3. queue 代码测试
- 3.1 priority_queue 优先队列,最大先出
- 3.2 改变出队优先级
- 4. deque 代码测试
- 5. vector 代码测试
- 6. set 代码测试
- 7. map 代码测试
- 7.1 multimap 一键对多值
- 8. sort 代码测试
- 9.反转和随机代码测试
学习链接
链接: STL教程:C++ STL快速入门(非常详细)
1. list 代码测试
#include<bits/stdc++.h>
using namespace std;void out(int n)
{cout<<n<<endl;
}void print(list<int> s)
{//for_each(s.begin(),s.end(),out);for(list<int> ::iterator it=s.begin();it!=s.end();it++) //for_each或者迭代器都可 out(*it); cout<<endl;
}int main()
{list<int> one(5,3); //赋值5个3 print(one); //输出 3 3 3 3 3 one.push_back(19); //插入数值 one.push_front(22);
// print(one); //输出22 3 3 3 3 3 19
// int a[5]={1,2,3,4,5};
// one.insert(one.begin(),a,a+3); //insert可以插入一个数值或者一组
// print(one); //输出 1 2 3 22 3 3 3 3 3 19
// one.remove(3); //删掉3
// print(one); //输出 1 2 22 19list<int> two(3,1);
// one.splice(one.begin(),two); //splice插入一个链表
// print(one); //输出 1 1 1 1 2 22 19
// one.sort();
// print(one); one.sort();two.sort();one.merge(two); //合并,最好之前先排序 print(one); //输出 1 1 1 3 3 3 3 3 19 20one.unique(); //去重 print(one); //输出 1 3 19 20 return 0;}
栈先进后出,队列先进先出
两者在 top 和 front 不同
2. stack 代码测试
#include<bits/stdc++.h>
using namespace std;int main()
{stack<int> s;for(int i=0;i<5;i++)s.push(i); //入栈cout<<s.size()<<endl; //输出5 while(!s.empty()){ //若栈为空,返回ture cout<<s.top()<<endl; //栈不能随机访问,只能从栈顶访问 输出 4 3 2 1 0 s.pop(); //删除栈顶 ,出栈}cout<<s.size()<<endl; //上一步删除完了,so输出0 return 0;
}
3. queue 代码测试
#include<bits/stdc++.h>
using namespace std;int main()
{queue<int> q;for(int i=0;i<5;i++)q.push(i); //入队 cout<<q.size()<<endl; while(!q.empty()){ cout<<q.front()<<endl; // 输出 0 1 2 3 4q.pop(); //第一个元素出队 }cout<<q.size()<<endl; //输出0 return 0;
}
3.1 priority_queue 优先队列,最大先出
出队使用 top
#include<bits/stdc++.h>
using namespace std;int main()
{priority_queue<int> q;for(int i=0;i<5;i++)q.push(i); //入队 q.push(10);while(!q.empty()){ cout<<q.top()<<endl; // 输出 10 4 3 2 1 0q.pop(); //出队 }return 0;
}
3.2 改变出队优先级
#include<bits/stdc++.h>
using namespace std;struct goods{ //goods商品 double w; //质量 double v; //价格
}g[10]; //符号的重载
bool operator <(const goods &a,const goods &b)
{return a.v>b.v; //价格越小越优先
}int main()
{priority_queue<goods> q;for(int i=0;i<5;i++){cin>>g[i].w>>g[i].v;q.push(g[i]); //入队 }while(!q.empty()){ cout<<q.top().w<<' '<<q.top().v<<endl; q.pop(); //出队 }return 0;
}
4. deque 代码测试
#include<bits/stdc++.h>
using namespace std;void print(deque<int> dq)
{deque<int>::iterator it;for(it=dq.begin();it!=dq.end();it++){cout<<*it<<endl;}
}int main()
{deque<int> dq;for(int i=0;i<5;i++){dq.push_front(i);}print(dq); //输出 4 3 2 1 0dq.clear();for(int i=0;i<5;i++){dq.push_back(i);}print(dq); //输出 0 1 2 3 4for(int i=0;i<2;i++){dq.pop_back();}print(dq); //输出 0 1 2 return 0;
}
5. vector 代码测试
#include<iostream>
#include<vector>
using namespace std;void print(vector<int> a)
{for(int i=0;i<a.size();i++){cout<<a[i]<<' ';}cout<<endl;
}int main()
{vector<int> a;for(int i=1;i<10;i++)a.push_back(i);print(a);vector<int>olda(a); for(int i=1;i<3;i++)a.pop_back();print(a);a.insert(a.begin()+2,100);print(a);int b[3]={0};a.insert(a.begin(),b,b+2); //参数:b表示数组第0个元素 print(a);a.swap(olda);print(a);a.erase(a.begin()+2,a.end()-2);print(a); return 0;
}
6. set 代码测试
#include<iostream>
#include<set>
using namespace std;void print(set<int> a)
{set<int>::iterator it;for(it=a.begin();it!=a.end();it++)cout<<*it<<' ';cout<<endl;
}int main()
{set<int> a;for(int i=10;i>0;i--)a.insert(i); //自动排序 print(a);a.insert(80);a.insert(5); //set中如果插入一个有的数,则什么也不做,但是multiset 可以插入相同数据 print(a);a.erase(5);print(a);return 0;
}
7. map 代码测试
#include<iostream>
#include<map>
using namespace std;map<string ,int> count;
string s;void print(map<string,int> count)
{map<string,int>::iterator it;for(it=count.begin();it!=count.end();it++){cout<<it->first<<'\t'<<it->second<<endl; //注意 }cout<<endl;
}int main()
{int n;cin>>n;for(int i=1;i<=n;i++){cin>>s;count[s]++;}print(count);count.insert(make_pair("abc",1)); //map一个键只能对应一个值 print(count); return 0;}
7.1 multimap 一键对多值
#include<iostream>
#include<map>
using namespace std;multimap<string ,int> count;
string s;void print(multimap<string,int> count)
{multimap<string,int>::iterator it;for(it=count.begin();it!=count.end();it++){cout<<it->first<<'\t'<<it->second<<endl; //注意 }cout<<endl;
}int main()
{int n;cin>>n;for(int i=1;i<=n;i++){cin>>s;count.insert(make_pair(s,i)); //输入的方法变了 }print(count);count.insert(make_pair("abc",4)); print(count); return 0;}
8. sort 代码测试
#include<bits/stdc++.h>
using namespace std;void print(int a[],int n)
{for(int i=0;i<n;i++)cout<<a[i]<<' ';} //自定义符号
bool cmp(int a,int b)
{return a<b;
}int main()
{int a[10];for(int i=0;i<10;i++){a[i]=i;}//sort(a,a+10,greater<int>()); //less sort(a,a+10,cmp);print(a,10);return 0;
}
9.反转和随机代码测试
#include<bits/stdc++.h>
using namespace std;void print(vector<int> a)
{for(int i=0;i<a.size();i++)cout<<a[i]<<' ';cout<<endl;
}int main()
{vector<int> a;for(int i=0;i<10;i++)a.push_back(i);print(a); //输出 0 1 2 3 4 5 6 7 8 9reverse(a.begin(),a.end());print(a); //输出 9 8 7 6 5 4 3 2 1 0random_shuffle(a.begin(),a.end());print(a); //输出 1 8 0 7 9 4 2 6 5 3return 0;}