一.vector
1)定義: vector < int > a;
- 其實就是一個不定長(動態)的數組,即你存多少元素他就佔多少的存儲空間
2)具體操作:
1.a.size():返回vector數組a的實際長度
2.a.empty():返回vector數組a是否爲空,若爲空,則返回1
3.a.clear():清空a數組
4.a.push_back(x):在a後面插入元素x,相當於數組的a[++len] = x
5.a.pop_back():彈出末尾的元素
6.a.back() / a.front():返回末尾/開頭的元素
7.a.begin / a.end():指向第一個元素的迭代器和vector的尾部(前閉後開)
3)遍歷數組
- vector是支持隨機訪問的,用法與數組相同.但下標是從0開始的
for (int i = 0; i < a.size(); i++) cout<<a[i]<<' ';
4)迭代器遍歷
- 迭代器相當於stl的指針,可以用*引用
聲明方法:vector < int >::iterator it
此時就可以和上述7.一起用了
for (vector < int > :: iterator it = a.begin(); it != a.end(); it++) cout<<*it<<endl;
當然vector也可以用來建圖
二.queue
1)循環隊列
定義:queue < int > q;
具體操作:
1.q.push(x)
2.q.pop()
3.q.front()
4.q.size() / q.empty()
q.back()
2.優先隊列
定義:
3.pair類型小根堆:
4.pair類型大根堆:
具體操作:
1.q.top(): 返回堆頂元素
2.q.push(x) : 將元素x放入堆
3.q.pop() : 彈出堆頂元素
3.雙端隊列
定義: deque < int > q
具體操作:
1. []: 可隨機訪問
2. q.begin() / q.end()
3. q.front() / q.back()
4. q.push_back(x) / q.push_front(x)
5. q.pop_back() / q.pop_front()
6. q.clear()
三、set
1)定義:
- set < int > s;//有序集合
- multiset < int > s;//有序多重集
2)具體操作:
1. s.size() / s,empty() / s.clear()
2. s.begin() / s.end()
3. set < int > :: iterator it
4. s.insert(x):插入x
5. s.find(x): 尋找元素x,並返回指向該元素迭代器
6. s.lower_bound(x) , s.upper_bound(x)
7. s.erase(it) : 刪除迭代器it指向的元素 / s.erase(x) : 刪除集合中所有大小爲x的元素
8. s.count(x) : 返回集合中x元素的個數
四、map
1)定義: map < 類型1 , 類型2 > M;
- 即將類型1映射到類型2 , 相當於hash吧
2)具體操作
1. [ ] : 直接訪問
//其他的用不太到,也跟上面的類似
五. biset
1)定義: biset < 10000 > s;
- 相當於一個10000位的二進制數組
2)具體操作
1. 位運算操作符
- ~s : 將s取反
- & , | , ^ : 返回兩個biset按照位運算執行的結果
- << , >> ,返回把一個biset左移、右移若干位的結果
2. [ ]:直接操作
3. s.count(): 返回有多少位是1
4. s.any(): 若所有爲都爲0,則返回false;若至少有一位是1,則返回true
5. s.none():若s至少有一位是1,則返回false;若都是0,則返回true
6. s.set(): 把s所有位都變成1
7. s.reset() : 把s的所有位變成0
8. s.flip() : 把s的所有位取反
五、序列上的函數操作
1)reverse :翻轉
2) unique : 去重
- 可以用於離散化
1.//此時m返回的是去重後vector的長度,即不同的元素的個數
- 數組:
例如 ,那麼通過一番操作後
3) next_permutation : 全排列
for (int i = 1; i <= n; i++) a[i] = i;
do{
for (int i = 1; i <= n; i++) cout<<a[i]<<' ';
}while (next_permutation(a+1,a+n+1));
4) sort : 排序
- 不用說吧