常用的C++ STL
Posted happy-medge
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常用的C++ STL相关的知识,希望对你有一定的参考价值。
内容
vector:不定长数组
1 #include <cstdio> 2 #include <iostream> 3 #include <vector> //相关头文件 4 using namespace std; 5 6 int main() 7 //vector(不定长数组)用法介绍 8 vector<int> G; //创建vector 9 G.push_back(5); //加入元素5, 类似于栈 10 G.push_back(3); //加入元素3 11 G.push_back(7); //加入元素7 12 //这时vector里面有元素: 5, 3, 7 13 14 //访问 15 int a; 16 a = G[0]; //a被赋值为vector里面的第一个元素,即a = 5 17 a = G[1]; //a被赋值为vector里面的第二个元素,即a = 3 18 19 //获得vector的大小: G.size() //这里是遍历vector里面的元素 20 for(int i = 0; i < G.size(); i++) 21 printf("%d\n", G[i]); 22 //这里G.size() == 3, 所以输出G[0], G[1], G[2] 23 24 printf("\n"); 25 26 //高级用法: vector数组 27 vector<int> g[3]; 28 //这里创建了3个vector, 其中分别是g[0], g[1], g[2] 29 g[1].push_back(4); //向g[1]这个vector加入元素4 30 g[1].push_back(1); //向g[1]这个vector加入元素1 31 32 //访问 33 a = g[1][0]; //a被赋值为g[1]里面的第一个元素,即a = 4 34 a = g[1][1]; //a被赋值为g[1]里面的第二个元素,即a = 1 35 36 for(int i = 0; i < g[1].size(); i++) 37 printf("%d\n", g[1][i]); 38 //这里g[1].size() == 2, 所以输出g[1][0], g[1][1] 39 40 41 return 0; 42
map:映射
1 #include <cstdio> 2 #include <iostream> 3 #include <map> 4 #include <string> 5 using namespace std; 6 7 int main() 8 //map用法介绍 9 map<string, int> mp; //创建一个map: 从string到1的映射 10 mp["abc"] = 1; //建立从字符串"abc"到整数1的映射 11 string s = "efg"; //创建一个string 12 mp[s] = 5; //建立从字符串"efg"到整数5的映射 13 14 //访问 15 int a; 16 a = mp["abc"]; //这时mp["abc"]的值为1, 也就是a = 1 17 cout << a << endl; 18 a = mp[s]; //这时mp[s]的值为5, 也就是a = 5 19 cout << a << endl; 20 21 //使用char数组 22 char s2[5] = "gsd"; 23 mp[s2] = 9; //建立从字符串"gsd"到整数9的映射 24 cout << mp[s2] << endl; 25 26 //最后注意的是, 虽然map看起来很像hash, 但其内部实现不是hash, 而是一颗树(红黑树) 27 //也就是说, 当进行访问map的操作时, 时间复杂度为O(log m)(m为映射数量), 并不是O(1) 28 29 return 0; 30
queue:队列
1 #include <cstdio> 2 #include <iostream> 3 #include <queue> 4 using namespace std; 5 6 int main() 7 //queue基本用法 8 queue<int> q; //创建一个先进先出的队列(也就是这个队列只能在尾部加入元素, 头部取出元素, 这个是关键) 9 q.push(1); //加入元素1 10 q.push(2); //加入元素2 11 q.push(3); //加入元素3 12 //这时队列是: 1, 2, 3 13 14 //访问 15 int a; 16 a = q.front(); //这时q.front()的值为1, 所以a = 1, 注意这里只是读取队列首元素, 并没有弹出元素 17 cout << a << endl; 18 a = q.front(); 19 cout << a << endl; 20 21 //弹出 22 q.pop(); //弹出队列的首元素, 也就是变成2, 3 23 a = q.front(); 24 cout << a << endl; 25 26 //判断队列是否为空 27 q.pop(); //弹出队列的首元素, 也就是变成3 28 q.pop(); //弹出队列的首元素, 此时队列为空 29 if(q.empty()) cout << "Yes\n"; //如果队列为空, 则q.empty()为真, 则输出"Yes" 30 if(q.size() == 0) cout << "Yes\n"; //如果队列大小为0, 则输出"Yes" 31 32 return 0; 33
sort:排序
1 #include <cstdio> 2 #include <iostream> 3 #include <algorithm> 4 using namespace std; 5 //先从主函数看 6 7 struct node 8 int first, second; 9 ; 10 11 bool cmp1(int x, int y) 12 return x > y; //从大到小排 13 14 15 bool cmp2(int x, int y) 16 return x < y; //从小到大排 17 18 19 bool cmp_node(node x, node y) 20 if(x.first == y.first) return x.second < y.second; 21 else return x.first < y.first; 22 //这里的意思: 优先对结构体的第一个值进行排序, 如果第一个值相等, 就按照第二个值进行排序 23 24 25 int main() 26 //sort的用法 27 int a[5] = 5,4,3,2,1; 28 sort(a, a+5); //默认对数组a进行从小到大排序 29 for(int i = 0; i < 5; i++) 30 cout << a[i] << " "; 31 32 cout << endl; 33 34 string s[3] = "bcd", "abc", "a"; 35 sort(s, s+3); //默认对字符串进行字典序排序 36 for(int i = 0; i < 3; i++) 37 cout << s[i] << endl; 38 39 cout << endl; 40 41 //自定义比较级(比较函数): 42 sort(a, a+5, cmp1); //按cmp1的比较级排序, 注意这里cmp1后面不能加() 43 for(int i = 0; i < 5; i++) 44 cout << a[i] << " "; 45 46 cout << endl; 47 48 sort(a, a+5, cmp2); //按cmp2的比较级排序 49 for(int i = 0; i < 5; i++) 50 cout << a[i] << " "; 51 52 cout << endl; 53 54 cout << endl; 55 //对结构体进行排序 56 node G[3] = 5,3, 5, 2, 1, 9; 57 sort(G, G+3, cmp_node); //按照cmp_node进行排序 58 for(int i = 0; i < 3; i++) 59 printf("G[%d]: %d %d\n", i, G[i].first, G[i].second); 60 61 cout << endl; 62 63 return 0; 64
priority_queue:优先队列
暂更
以上是关于常用的C++ STL的主要内容,如果未能解决你的问题,请参考以下文章