马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
STL
by lqx
vector
- #include <bits/stdc++.h>
- using namespace std;
- #define int long long
- signed main(){
- ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
-
- vector<int>v1;
- for(int i=0;i<=5;i++)v1.push_back(i); //012345
- v1.pop_back(); //01234
- reverse(v1.begin(),v1.end()); //43210
- v1.erase(v1.begin()+2); //将v1[2]删除
- for(auto i:v1)cout<<i;cout<<'\n'; //4310
-
- vector<int>v2(10); //初始化10个0
- v2.insert(v2.begin()+2,-1); //将-1插入v2[2]的位置
- cout<<"v2.size():"<<v2.size()<<'\n'; //11
- for(auto i:v2)cout<<i;cout<<'\n'; //00-100000000
-
- vector<int>v3(7,4); //初始化7个4
- v3.erase(v3.begin()+1,v3.begin()+3); //删除[first,last)元素
- for(auto i:v3)cout<<i;cout<<'\n'; //44444
-
- vector<int>v4{4,2,3,1,4,5,6}; //{}直接赋值
- vector<int>v5(v4.begin(),v4.end()); //复制v4的元素
- for(auto i:v5)cout<<i;cout<<'\n'; //4231456
- //vector离散化模板:v.erase(unique(v.begin(),v.end()),v.end())
- sort(v4.begin(),v4.end());
- for(auto i:v4)cout<<i;cout<<'\n'; //1234456
- v4.erase(unique(v4.begin(),v4.end()),v4.end());
- for(auto i:v4)cout<<i;cout<<'\n'; //123456
-
- vector<int>v[10]; //二维数组 v[0]~v[9]都是一个vector
- //vector<vector<int> >v(10);等价
- for(int i=1;i<5;i++)v[0].push_back(i);
- for(int i=1;i<9;i++)v[1].push_back(i);
- cout<<v[0].size()<<' '<<v[1].size()<<'\n'; //4 8
- for(auto i:v[0])cout<<i;cout<<'\n'; //1234
- for(auto i:v[1])cout<<i;cout<<'\n'; //12345678
- return 0;
- }
复制代码 map
- #include <bits/stdc++.h>
- using namespace std;
- #define int long long
- signed main(){
- ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
- map<int,string> mp1;
- map<string,int> mp2;
- mp1[1]="lqx";mp2["lqx"]=1;
- mp1[2]="lts";mp2["lts"]=2;
- mp1[3]="lzl";mp2["lzl"]=3;
- mp1[4]="djy";mp2["djy"]=4;
- cout<<mp1.size()<<' '<<mp2.size()<<'\n'; //4 4
- for(int i=1;i<=4;i++)cout<<mp1[i]<<'\n';
- string s;cin>>s;
- cout<<mp2[s];
- return 0;
- }
复制代码 unordered_map
- unordered_map底层是用哈希表实现的,map底层是用红黑树实现的
- unordered_map是不按键值排序的,插入的时间是O(logn),查询时间是O(1)
- map是按键值排序的,插入的时间是O(logn),查询时间是O(logn)
- unordered_map和map的利用险些是同等的
- #include <bits/stdc++.h>
- using namespace std;
- #define int long long
- signed main(){
- ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
- unordered_map<int,string> mp1;
- unordered_map<string,int> mp2;
- mp1[1]="lqx";mp2["lqx"]=1;
- mp1[2]="lts";mp2["lts"]=2;
- mp1[3]="lzl";mp2["lzl"]=3;
- mp1[4]="djy";mp2["djy"]=4;
- cout<<mp1.size()<<' '<<mp2.size()<<'\n'; //4 4
- for(int i=1;i<=4;i++)cout<<mp1[i]<<'\n';
- string s;cin>>s;
- cout<<mp2[s];
- return 0;
- }
复制代码 stack
- #include <bits/stdc++.h>
- using namespace std;
- #define int long long
- signed main(){
- stack<int> s,t;
- for(int i=1;i<=4;i++)s.push(i);
- s.pop();
- t.push(s.top());
- cout<<s.size()<<'\n'; //3
- while(!s.empty()){
- cout<<s.top()<<' ';
- s.pop();
- } //3 2 1
- cout<<'\n';
- while(!t.empty()){
- cout<<t.top()<<' ';
- t.pop();
- } //3
- return 0;
- }
复制代码 queue
- #include <bits/stdc++.h>
- using namespace std;
- #define int long long
- signed main(){
- queue<int> s,t;
- for(int i=1;i<=4;i++)s.push(i),t.push(s.back());
- cout<<s.size()<<'\n'; //4
- cout<<s.front()<<' '<<s.back()<<'\n';//1 4
- while(!s.empty()){
- cout<<s.front()<<' ';
- s.pop();
- } //1 2 3 4
- cout<<'\n';
- while(!t.empty()){
- cout<<t.front()<<' ';
- t.pop();
- } //1 2 3 4
- return 0;
- }
复制代码 deque
- #include <bits/stdc++.h>
- using namespace std;
- #define int long long
- signed main(){
- deque<int> s,t;
- for(int i=1;i<=4;i++)s.push_back(i),t.push_back(s.back());
- s.push_front(0);
- s.push_back(5);
- cout<<s.size()<<'\n'; //6
- while(!s.empty()){
- cout<<s.front()<<' ';
- s.pop_front();
- } //0 1 2 3 4 5
- cout<<'\n';
- t.pop_front();
- t.pop_back();
- cout<<t.size()<<'\n'; //2
- while(!t.empty()){
- cout<<t.front()<<' ';
- t.pop_front();
- } //2 3
- return 0;
- }
复制代码 priority_queue
priority_queue默认大根堆,队首元素最大值- #include <bits/stdc++.h>
- using namespace std;
- int main(){
- priority_queue<int> q1;//默认大顶堆
- //priority_queue<int,vector<int>,less<int>> q1; 等价
- priority_queue<int,vector<int>,greater<int>> q2;//小根堆
- for(int i=1;i<=5;i++)q1.push(i);
- for(int i=1;i<=5;i++)q2.push(i);
- while(!q1.empty()){
- cout<<q1.top();
- q1.pop();
- } //54321
- cout<<'\n';
- while(!q2.empty()){
- cout<<q2.top();
- q2.pop();
- } //12345
- cout<<'\n';
- for(int i=1;i<=5;i++)q1.push(i);
- for(int i=1;i<=5;i++)q2.push(i);
- q1.pop();
- q2.pop();
- while(!q1.empty()){
- cout<<q1.top();
- q1.pop();
- } //4321
- cout<<'\n';
- while(!q2.empty()){
- cout<<q2.top();
- q2.pop();
- } //2345
- return 0;
- }
复制代码 set
- #include <bits/stdc++.h>
- using namespace std;
- int main(){
- set<int> s;//自动排序去重
- for(int i=5;i>0;i--)s.insert(i);
- s.insert(9);
- s.insert(3);
- s.erase(2);
- cout<<s.size()<<'\n';
- for(auto i:s)cout<<i; //13459
- cout<<'\n';
- //查找元素 s.find(x)==s.end()?"N":"Y"
- if(s.find(5)!=s.end())cout<<"5在集合里\n";
- else cout<<"5不在集合里\n";
- if(s.find(99)!=s.end())cout<<"99在集合里\n";
- else cout<<"99不在集合里\n";
- return 0;
- }
复制代码 |