STL 使用手册 1 2 3 4 .size ()		 .empty ()	 .clear ()	 
 
一、vector 本质仍是数组,只是内存可以可以自动变化。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 vector<int >a; vector<int >a[N];	 vector<int >::iterator it;    a.push_back (x)	    a.pop_back ()	 a.erase ()	    a.front ()	 a.back ()	 a.begin ()	 a.end ()	 sort (a.begin (),a.end ()); a.erase ( (unique (a.begin),a.end ()) ,a.end ());  sort (a.begin (), a.end (), greater <int >())    for (int  i=0 ; i<a.size (); i++)for (vector<int >::iterator i=a.begin (); i!=a.end (); i++) for (auto  x:a)
 
二、pair 和 string pari,相当于结构体,按字典序,第一关键字为first,第二关键字为second。
1 2 3 4 5 pair<int ,string> p; p.first ();	 p.second ();	 
 
string,字符串,内容为字符的数组。用法大抵相同。
1 2 3 4 5 6 7 string s; cin>>s; s.substr (a,b);	 transform (s.begin (),s.end (),s.begin (),::tolower); transform (s.begin (),s.end (),s.begin (),::toupper);	
 
三、stack 先进后出,类似汉诺塔。
1 2 3 4 5 6 stack<int >s; s.push (x);    s.pop ();      s.top ();      
 
四、queue 和 priority_queue 队列queue相当于,栈的栈底开口出去,栈顶只能进去。优先队列priority_queue是可以自动排序的queue。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 queue<int >q; q.push (x);  q.pop ();    q.front ();  q.back ();   priority_queue<int > a;       priority_queue<int , vector<int >, greater<int >> a;    a.push (x);  a.pop ();    a.top ();    
 
五、deque 队头队尾均可插入弹出。
1 2 3 4 5 6 7 8 9 10 11 deque<int > a; a.push_back (x);    a.push_front (x);   a.pop_back ();      a.pop_front ();     a.begin ();           a.end ();             a.front ();           a.back ();            
 
六、set、multiset、unordered_set、unordered_multiset     “有序集合”和“有序多重集合”,即前者的元素不能重复,而后者可以包含若干个相等的元素。set和multiset的内部实现是一棵红黑树,它们支持的函数基本相同。
    无序集合unordered_set与普通集合所有操作都一样,所有操作的时间复杂度变为了O(1),但没有lower_bound和upper_bound操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 set<int > s; multiset<int > s; s.insert (x);	 s.erase (it);     s.begin (); s.end (); s.find (x)	 s.lower_bound (x);  s.upper_bound (x);  s.count (x);      unordered_set<int > a;        unordered_multiset<int > a;   
 
七、map、unordered_map map容器是一个键值对key-value的映射,其内部实现是一棵以key为关键码的红黑树,map的key和value可以是任意类型,其中key必须定义小于号运算符。(也可以看成是哈希表。)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 map<string, int > m; m["headm" ]=1 ; m.insert ({one,2 }); m.erase (x); a.begin (); a.end (); map.count (key) > 0 ; if  (a.find (x) == a.end ());   unordered_map<int , int > a;   
 
八、bitset bitset相当于⼀个数组,但是它是从⼆进制的低位到⾼位分别为b[0]、 b[1]……的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 bitset<1000> a; bitset<5> b; 都为0  bitset<5> b (u)  ; u为unsigned  int ,如果u = 1 ,则输出b的结果为00001 bitset<8 > b (s); s为字符串,如"1101" ,则输出b的结果为00001101 ,在前⾯补0  bitset<5> b (s, pos, n)  ; 从字符串的s[pos]开始, n位⻓度a[0 ] = 1 ; b.any ();  b.none ();  b.count ();  b.size ();  b.test (2 );  b.set (4 );  b.reset ();  b.reset (3 );  b.flip ();  flip (); flip (k); unsigned  long  a = b.to_ulong (); 
 
九、位运算 1 2 3 4 5 6 7 x >> k & 1 ;      lowbit (x) = x & (-x);  if (a&1 ) return  odd;	else  return  even;	
 
十、常用库函数 reverse, unique, 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 #include <algorithm>       reverse (a.begin (), a.end ());    reverse (a, a + n);              unique (a, a + n);int  m = unique (a.begin (), a.end ()) – a.begin (); int  m = unique (a , a + n) – a;a.erase (unique (a.begin (), a.end ()), a.end ());	 #include <ctime>  srand (time (0 ));random_shuffle (a.begin (), a.end ());     sort (a.begin (), a.end ());                    sort (a.begin (), a.end (), greater <int >());    bool  cmp (int  a, int  b)    {    return  a < b; } sort (a.begin (), a.end (), cmp);               struct  rec {     int  x, y; }; bool  cmp (rec a, rec b)  {    return  a.x > b.x; } rec a[5 ]; sort (a, a + 5 , cmp);lower_bound (a.begin (), a.end (), x)      upper_bound (a.begin (), a.end (), x)      
 
十一、常用技巧  
由数据范围反推算法复杂度以及算法内容