目录
- STL常用容器
- vector容器
- pair c++内置二元组 不需要头文件
- string
- queue 队列
- priority_queue 优先队列
- stack 栈
- deque 双端队列 速度异常的慢
- set map multiset multimap
- **unordered_set,unordered_map unordered_multiset unordered_multimap**
- bitset 为了省内存 省8倍空间
常用STL有 (需要List 做算法题可以自己用数组实现,速度快,不用使用STL)
-
vector 变长数组 ,倍增思想
-
string 字符串 substr() 返回子串 ,c_str() 对应数组头指针
-
queue 队头插入push(), 返回队头front() ,pop()
-
priority_queue 优先队列 push() top() pop() 实际上是一个堆
-
stack 栈 push() top() pop()
-
deque 双端队列
-
set, map, muliset, multimap 基于平衡树(红黑树) 动态维护有序序列
-
unordered_set,unordered_map unordered_multiset unordered_multimap 哈希表
-
bitset 压位
#includevector容器#include #include #include using namespace std;
#includevector b(10,-3);//长度为10 值全为-3的vector vector a; int value=520; a.push_back(value);//尾插 a.front();//返回第一个数 a.back();//返回最后一个数 a.size();//返回大小 a.empty();//是否为空 a.clear();//清空 不是删除 //迭代器 //返回迭代器 begin(),end(); for(int i=0;i<10;i++) a.push_back(i); //三种迭代方式 for(int i=0;i cout<::iterator替换成auto for(vector ::iterator i =a.begin();i!=a.end();i++) //相当于指针 { cout<<*i<<' '; } for(auto x:a) cout< a(4,3),b(3,4); if(a pair c++内置二元组 不需要头文件 pairstringp; p.first //第一个元素 p.second //第二个元素 p = make_pair(10,"abc") p ={20,"abc"}; //vector > a;//>>不要连续写 以为是插入 //sort(a);//排序默认 first关键字 //储存三个元素 pair > a; #includestring a; a.size(); a.empty(); a.clear(); a= "abc"; a+="c";//--> a="abcc" cout< queue 队列 #includepriority_queue 优先队列queue a; a.push(); a.empty(); a.front(); a.back(); a.pop(); a.size(); //注意没有a.clear()函数 //想要清空怎么办? a = queue ();//就行了 #includestack 栈priority_queue heap;//默认大根堆 //如何定义小根堆? 也可以用x的相反数插入 #include priority_queue ,greater > heap; #includedeque 双端队列 速度异常的慢stack a; a.push(); a.size(); a.top(); a.pop(); #includeset map multiset multimapdeque a; a.size(); a.empty(); a.clear(); a.front();a.back(); a.push_back();a.pop_back(); a.push_fron();a.pop_front(); a.begin();a.end(); //也可以用 a[i]访问 //都支持的函数 size(); empty(); clear();//都支持 begin(); end(); #includeunordered_set,unordered_map unordered_multiset unordered_multimapset s; //set/multiset(后者元素可重复) int value= 1; s.insert(value); //都是O(logn) s.find(value); s.count(value);//计算某个数的个数 set只有01两种情况 multiset有多种 s.erase(value);//删除一个数 o(logn+k) s.erase(iterator);//删除迭代器 s.lower_bound(value);//返回>=value的最小的数的迭代器 不存在返回end() s.upper_bound(value);//返回>value的最小的数 //map multimap #include //和上面类似 时间复杂度为O(1) //但是不支持lower_bound() 和upper_bound() 不支持迭代器++ -- #includebitset 为了省内存 省8倍空间undered_map a={{"yt",1},{"wjx",2},{"lxw",3}}; printf("%dn",a["yt"]);// 1 //比如你想要 10000*10000的bool矩阵 10^8 B //此时100MB了 #includebitset<10000> s; //支持 ~,&,|,^,>>,<<,==,!=,[] s.count();//返回有多少个1 s.any();//判断是否至少有一个1 s.none();//判断是否全为0 s.set();//所有位置变成1 s.set(k,v);//把k位变为0 s.reset();//所有置为0 s.flip();//等价与~ s.flip(k);//第k位取~ bitset<2> bitset1(12); //12的二进制为1100(长度为4),但bitset1的size=2,只取后面部分,即00 string s = "100101"; bitset<4> bitset2(s); //s的size=6,而bitset的size=4,只取前面部分,即1001 char s2[] = "11101"; bitset<4> bitset3(s2); //与bitset2同理,只取前面部分,即1110 cout << bitset1 << endl; //00 cout << bitset2 << endl; //1001 cout << bitset3 << endl; //1110



