[toc]
可以理解為bit這個資料型別的陣列(即取值只為0/1),大多數情況下,每個元素所佔記憶體確實只有1bit,是bool型別的1/8。方便各種位操作的進行。
構造方法
都需要在定義時指明長度
123
4567
8
預設:
std::bitset<16> foo; //填充0
整數:std::bitset<16> foo(0x1111); //0001000100010001
std::string
std::bitset<4> foo(std::string("1010")); //1010
位操作
123
4567
891011
1213
1415
1617
1819
:
類似陣列直接訪問
.count():
返回乙個bitset中1的個數
.size():
返回乙個bitset的長度
.any():
返回乙個bool值,表示這個bitset中是否至少有乙個1,與.none()相反
.all():
返回乙個bool值,表示這個bitset中是否全為1
.set():
將bitset全置1
.set(size_t pos, bool val = true)
將pos位上元素置val值
整體操作
1
23
to_string() //convert to std::string
to_ulong() //convert to unsigned long
to_ullong() //convert to unsigned long long
優先佇列(預設)的本質是乙個大根堆,它的top元素始終是最大的。
優先佇列的底層container預設是vector。
構造方法
1
23
std::priority_queue, std::greater> pq(first,last);
//指定比較函式greater,變為小根堆
//first和last是儲存初始化資料的陣列指標
成員函式
123
45
.empty(): return true if it's empty
.size(): return size
.top(): 獲取頂部元素
.push(): 插入元素
.pop(): remove top element
儲存了乙個有序對,兩個元素分別為first和second,可以有不同型別
過載函式
123
4567
8910
標頭檔案關係比較:
先比較first,再比較second
swap(p1,p2):
交換兩個同型別的pair object
get(pair p)
i為0時返回first元素,為1時返回second
構造
123
4567
8
普通構造方式略。
很多其他stl資料結構中有用到make_pair函式
template pairmake_pair (t1 x, t2 y)
引數(first, last, x),原陣列已從小到達排序
在[first, last)中找到第乙個》=x的元素的位置
upper_bound是找到第乙個》x的元素位置
這兩個函式中,如果找不到滿足要求的,返回last
可遍歷vector和map
123
4567
891011
int main()
輸出1、2、3
可見是按照key值遍歷組成map的這些pair
1
2
string::substr()
string substr (size_t pos = 0, size_t len = npos) const;返回子串
123
456
過載(key_type k)
如果mp中存在匹配到k的pair,則返回這個pair.second的引用
否則插入乙個新的pair,second值為0
對於計數型別的輸入,我們可以每次mp[x]+=1;它會從0開始向上加
可用vector:reserve(n)進行預先記憶體分配
vector成員函式
1
23
.back()取最後乙個元素值
.front()取第乙個
.pop_back()彈出最後乙個
內部是一棵紅黑樹,有序儲存元素。(預設公升序)
123
4567
set.erase(iterator或value):返回刪除元素的下乙個iterator 或
set.erase(iterator first,iterator last):抹去[first,last)區間,返回抹去元素數量
set.lower_bound&upper_bound(value)
不能存同值元素。
insert插入元素,find尋找值等於某一元素的iterator找不到返回end,count存在返回1否則返回0
STL中常用的查詢演算法
adjacent find 在iterator對標識元素範圍內,查詢一對相鄰重複元素,找到則返回指向這對元素的第乙個元素的迭代器。否則返回past the end。vectorvecint vecint.push back 1 vecint.push back 2 vecint.push back ...
STL中常用的排序演算法
merge 例如 vecinta,vecintb,vecintc是用vector宣告的容器,vecinta已包含1,3,5,7,9元素,vecintb已包含2,4,6,8元素 vecintc.resize 9 擴大容量 merge vecinta.begin vecinta.end vecintb....
C 提高 STL中常用的查詢演算法
在iterator對標識元素範圍內,查詢一對相鄰重複元素,找到則返回指向這對元素的第乙個元素的迭代器。否則返回past the end。vector int vecint vecint.push back 1 vecint.push back 2 vecint.push back 2 vecint....