一些总结,有错误欢迎指正!!!
1 vector
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>using namespace std;int main ()
{//vectorvector<int> a;a.size(); a.empty();a.clear();a.front();a.back();a.push_back();a.pop_back();a.begin(), a.end();//[]支持随机寻址,类似数组//遍历方式:3种for(int i = 0; i < a.size(); i ++ )for(vector<int>::iterator i = a.begin(); i != a.end(); i ++ )//vector<int>::iterator 可以写成autofor(auto x : a)//支持比较运算,按照字典序return 0;
}
2 pair
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>using namespace std;int main ()
{//pair 好处是相当于帮我们实现了一个结构体,并且自带一个比较函数pair<int, string> p;p.first();p.sceond();//支持比较运算,p = make_pair(10, "aaa");p = {20, "abc"};//也可以存3个东西pair<int, pair<int, int>> pp;return 0;
}
3 string
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>using namespace std;int main ()
{//stringstring s = "aaa";s.size(); s.length();//功能和size一样s.empty();s.clear();//支持直接加的操作s += "bbb";a.substr(1, 2);//两个参数,1是开始取子串的下标,2是子串的长度。//如果第二个参数超过了剩余部分的长度,就会到串的最后停止。//也可以不给参数,默认直接取到最后//如果用printf输出时:需要注意,可以用s.c_str()取到s存储字符串的起始地址printf("%s", s.c_str());return 0;
}
4 queue
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
#include <queue>
using namespace std;int main ()
{//queue 先进先出queue<int> q;q.size();q.empty(); // 注意没有clear 函数q = queue<int>(); //想要清空一个队列可以重新构造一个q.push(); //向队尾插入一个元素q.front(); //返回队头元素q.back(); //返回队尾元素q.pop(); //弹出队头元素return 0;
}
5 priority_queue
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
#include <queue>using namespace std;int main ()
{//priority_queue 默认大根 ,别忘记这个需要include queue//实现小根//(1)插入的时候插入-x;//(2)priority_queue<int, vector<int>, greater<int>> heap;priority_queue<int> heap;heap.push();//插入一个元素heap.top(); //返回堆顶元素heap.pop(); //弹出堆顶元素return 0;
}
6 stack
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
#include <stack>using namespace std;int main ()
{//stackstack<int> stk;stk.size();stk.empty();stk.push();stk.top();stk.pop();return 0;
}
7 deque
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
#include <queue>
using namespace std;int main ()
{//deque 双端队列,相当于加强版的vectordeque<int> q;q.size();q.empty();q.clear();q.front();q.back();q.push_back();//队尾插入q.pop_back();//队尾弹出q.push_front();//队头插入q.pop_front;//队头弹出//也支持[]随机寻址q.begin(); //支持迭代器q.end();return 0;
}
8 set、map、multiset、multimap
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
#include <set>
#include <map>using namespace std;int main ()
{//动态维护有序序列//(1)set & multiset :size(), empty(), clear() 时间复杂度O(logn)//begin(), end() ++ -- 返回前驱和后继 时间复杂度O(logn)set<int> S; //不能有重复元素,插入一个重复元素会被忽略,以下函数时间复杂度基本都是lognmultiset<int> MS;S.insert();//插入一个数S.find(); //查找一个数, 不存在返回end()S.count(); //返回一个数的个数,set只返回0或者1S.erase(); //(1)输入是一个数x,删除所有x(multiset会把所有的x都删掉)O(k + logn)//(2)输入一个迭代器,删除这个迭代器(只会删一个迭代器)lower_bound(x); //返回的是: 大于等于x的最小的数的迭代器,如果不存的话返回end()upper_bound(x); //返回的是: 大于 x的最小的数的迭代器//(2)map & multimap :size(), empty(), clear(), begin(), end() ++ -- 返回前驱和后继map<string, int> M;M["aaa"] = 1; //将aaa映射到1multimap<int> MM;S.insert(); //一个映射,插入的数是一个pairS.erase(); //出入参数是一个pair或者迭代器S.find();//[] 像用数组那样用,但是时间复杂度是O(logn)lower_bound();upper_bound();return 0;
}
9 unordered_set、unordered_map、unordered_multiset、unordered_multimap
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
#include <set>
#include <map>
#include <unordered_map>
#include <unordered_set>using namespace std;int main ()
{//和set、map、multiset、multimap用法类似,但是增删改查时间复杂度是O(1)//不支持 lower_bound() 和 upper_bound(), 以及迭代器的 ++ --unordered_set<string, int> a;unordered_map<string, int> b;unordered_multiset<string, int> c;unordered_multimap<string, int> d;return 0;
}
10 bitset
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
#include <set>
#include <map>
#include <unordered_map>
#include <unordered_set>using namespace std;int main ()
{//bitset 可以省8倍空间bitset<10000> S;//支持所有位运算操作/*~s, &, |, ^>>, <<==, !=[]*/count(); //返回有多少个1any(); //判断是否至少有一个1none();//判断是否全为0set();//把所有位置设置成1set(k, v); //将第k位变成vreset(); //把所有位变成0flip(); //取反,等价于~flip(k);//把第k位取反return 0;
}