僅自己回憶使用,若有侵權,聯系洗掉
algorithm實用庫函式
sort:迭代器型別必須為隨機訪問迭代器(first,last),應該支持< 運算子,可以自己寫比較
nth_element() > partial_sort() > sort() > stable_sort() <--從左到右,性能由高到低
- 如果需要對所有元素進行排序,則選擇 sort() 或者 stable_sort() 函式;
- 如果需要保持排序后各元素的相對位置不發生改變,就只能選擇 stable_sort() 函式,而另外 3 個排序函式都無法保證這一點;
- 如果需要對最大(或最小)的 n 個元素進行排序,則優先選擇 partial_sort() 函式;
- 如果只需要找到最大或最小的 n 個元素,但不要求對這 n 個元素進行排序,則優先選擇 nth_element() 函式,
- 在實際選擇排序函式時,應更多從所需要完成的功能這一角度去考慮,而不是一味地追求函式的性能,換句話說,如果你選擇的演算法更有利于實作所需要的功能,不僅會使整個代碼的邏輯更加清晰,還會達到事半功倍的效果,
| 函式名 | 用法 |
|---|---|
| void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp) | 對容器或普通陣列中 [first, last) 范圍內的元素進行排序,comare不寫默認升序,回傳bool型別bool mycomp(int i, int j) |
| void stable_sort ( RandomAccessIterator first, RandomAccessIterator last, Compare comp ); | 和 sort() 函式功能相似,不同之處在于,對于 [first, last) 范圍內值相同的元素,該函式不會改變它們的相對位置, |
| void partial_sort (RandomAccessIterator first, RandomAccessIterator middle, RandomAccessIterator last, Compare comp); | 從 [first,last) 范圍內,篩選出 muddle-first 個最小的元素并排序存放在 [first,middle) 區間中, |
| RandomAccessIterator partial_sort_copy (InputIterator first, InputIterator last,RandomAccessIterator result_first,RandomAccessIterator result_last, Compare comp); | 從 [first, last) 范圍內篩選出 result_last-result_first 個元素排序并存盤到 [result_first, result_last) 指定的范圍中,值得一提的是,[first, last] 中的這 2 個迭代器型別僅限定為輸入迭代器,這意味著相比 partial_sort() 函式,partial_sort_copy() 函式放寬了對存盤原有資料的容器型別的限制,換句話說,partial_sort_copy() 函式還支持對 list 容器或者 forward_list 容器中存盤的元素進行“部分排序”,而 partial_sort() 函式不行, |
| bool is_sorted (ForwardIterator first, ForwardIterator last, Compare comp); | 檢測 [first, last) 范圍內是否已經排好序,默認檢測是否按升序排序, |
| ForwardIterator is_sorted_until (ForwardIterator first, ForwardIterator last, Compare comp); | 和 is_sorted() 函式功能類似,唯一的區別在于,如果 [first, last) 范圍的元素沒有排好序,則該函式會回傳一個指向首個不遵循排序規則的元素的迭代器, |
| void nth_element (RandomAccessIterator first,RandomAccessIterator nth,RandomAccessIterator last,Compare comp); | 找到 [first, last) 范圍內按照排序規則(默認按照升序排序)應該位于第 nth 個位置處的元素,并將其放置到此位置,同時使該位置左側的所有元素都比其存放的元素小,該位置右側的所有元素都比其存放的元素大, |
| 對于list有自己專有的sort |
remove:ForwardIterator remove (ForwardIterator first, ForwardIterator last, const T& val)
fill:在 #include <algorithm> 頭?件中,使??法: fill(begin,end,val); fill(e[0], e[0] + 500 * 500, inf);
min : const T& min (const T& a, const T& b, Compare comp);
ForwardIterator min_element ( ForwardIterator first, ForwardIterator last )
swap:void swap (T& a, T& b);
replace:void replace (ForwardIterator first, ForwardIterator last,const T& old_value, const T& new_value);
count:difference_type count (InputIterator first, InputIterator last, const T& val);
reverse:reverse(begin(v), end(v))
next_permutation()
next_permutation() 和 // 頭?件 #include <algorithm> ,使??法如下:
string s = "12345";
do {
cout << s << endl;
}while(next_permutation(s.begin(), s.end()));
最后得到54321
find:
InputIterator find (InputIterator first, InputIterator last, const T& val);
InputIterator find_if (InputIterator first, InputIterator last, UnaryPredicate pred);函式會根據指定的查找規則,在指定區域內查找第一個符合該函式要求(使函式回傳 true)的元素,
InputIterator find_if_not (InputIterator first, InputIterator last, UnaryPredicate pred);和 find_if() 函式一樣,find_if_not() 函式也適用于所有的容器,包括所有序列式容器和關聯式容器,
所謂自定義查找規則,實際上指的是有一個形參且回傳值型別為 bool 的函式,值得一提的是,該函式可以是一個普通函式(又稱為一元謂詞函式),比如:
bool mycomp(int i) {
return ((i%2)==1);
}
目錄頁
C++ find_first_of()函式完全攻略
C++ find_end()函式詳解
C++ search()函式用法完全攻略
C++ search_n()函式用法(超級詳細)
set和map有專有的find,STL 標準庫提供有 count()、find()、lower_bound()、upper_bound() 以及 equal_range() 這些函式,而每個關聯式容器(除哈希容器外)也提供有相同名稱的成員方法
binary_search,lower_bound,upper_bound,
//在 [first, last) 區域內查找不小于 val 的元素,也就是說,使用該函式在指定范圍內查找某個目標值時,最終查找到的不一定是和目標值相等的元素,還可能是比目標值大的元素,
ForwardIterator lower_bound (ForwardIterator first, ForwardIterator last,const T& val);
//在 [first, last) 區域內查找第一個不符合 comp 規則的元素
ForwardIterator lower_bound (ForwardIterator first, ForwardIterator last,const T& val, Compare comp);
//查找[first, last)區域中第一個大于 val 的元素,
ForwardIterator upper_bound (ForwardIterator first, ForwardIterator last,const T& val);
//查找[first, last)區域中第一個不符合 comp 規則的元素
ForwardIterator upper_bound (ForwardIterator first, ForwardIterator last,const T& val, Compare comp);
upper_bound() 函式的功能和 lower_bound() 函式不同,前者查找的是大于目標值的元素,而后者查找的不小于(大于或者等于)目標值的元素,
distance(upper_bound(),lower_bound())就是相等的個數
//equel_range() 函式的功能完全可以看做是 lower_bound() 和 upper_bound() 函式的合體,
//找到 [first, last) 范圍內所有等于 val 的元素
pair<ForwardIterator,ForwardIterator> equal_range (ForwardIterator first, ForwardIterator last, const T& val, Compare comp);
//查找 [first, last) 區域內是否包含 val
bool binary_search (ForwardIterator first, ForwardIterator last,
const T& val);
//根據 comp 指定的規則,查找 [first, last) 區域內是否包含 val
bool binary_search (ForwardIterator first, ForwardIterator last,
const T& val, Compare comp);
string::npos 用法
string s = "abcdefg";int idx = s.find('.'); //作為return value,表示沒有匹配項if (idx == string::npos) cout << "This string does not contain any period!" << endl;idx = s.find('c');s.replace(idx + 1, string::npos, "x"); string::npos作為長度引數,表示直到字串結束cout << s;
-
輸出結果:
This string does not contain any period!abcx
merge:
OutputIterator merge (InputIterator1 first1, InputIterator1 last1,InputIterator2 first2, InputIterator2 last2,OutputIterator result, Compare comp);
可以看到,first1、last1、first2 以及 last2 都為輸入迭代器,[first1, last1) 和 [first2, last2) 各用來指定一個有序序列;result 為輸出迭代器,用于為最終生成的新有序序列指定存盤位置;comp 用于自定義排序規則,同時,該函式會回傳一個輸出迭代器,其指向的是新有序序列中最后一個元素之后的位置,
merge(first, first + 5, second, second + 6, myvector.begin());
void inplace_merge (BidirectionalIterator first, BidirectionalIterator middle, BidirectionalIterator last, Compare comp);其中,first、middle 和 last 都為雙向迭代器,[first, middle) 和 [middle, last) 各表示一個有序序列,和 merge() 函式一樣,inplace_merge() 函式也要求 [first, middle) 和 [middle, last) 指定的這 2 個序列必須遵循相同的排序規則
inplace_merge(first, first + 5,first +11);
不同之處在于,merge() 函式會將最終合并的有序序列存盤在其它陣列或容器中,而 inplace_merge() 函式則將最終合并的有序序列存盤在 [first, last) 區域中,
對于list有自己專有的merge
盡量不自己定義迭代器指標指向迭代器,以免發生意外,當然如果確定的話也可以,
vector
初始化:
- std::vector<double> values;通過reserve() 函式來增加容器的容量values.reserve(20);呼叫 reserve() 不會影響已存盤的元素,也不會生成任何元素已經大于或等于 20 個元素,那么這條陳述句什么也不做
- std::vector<int> primes {2, 3, 5, 7, 11, 13, 17, 19};
- std::vector<double> values(20);std::vector<double> values(20, 1.0);第二個引數指定了所有元素的初始值,因此這 20 個元素的值都是 1.0,值得一提的是,圓括號 () 中的 2 個引數,既可以是常量,也可以用變數來表示,例如:int num=20;double value =https://www.cnblogs.com/ahappyfool/archive/2023/03/01/1.0;std::vector
values(num, value); - std::vector<char>value1(5, 'c'); std::vector<char>value2(value1);
- 可以用一對指標或者迭代器來指定初始值的范圍,例如:
int array[]={1,2,3}; std::vector<int>values(array, array+2);//values 將保存{1,2} std::vector<int>value1{1,2,3,4,5}; std::vector<int>value2(std::begin(value1),std::begin(value1)+3);//value2保{1,2,3}
| 函式成員 | 函式功能 |
|---|---|
| begin() | 回傳指向容器中第一個元素的迭代器, |
| end() | 回傳指向容器最后一個元素所在位置后一個位置的迭代器,通常和 begin() 結合使用, |
| rbegin() | 回傳指向最后一個元素的迭代器, |
| rend() | 回傳指向第一個元素所在位置前一個位置的迭代器, |
| cbegin() | 和 begin() 功能相同,只不過在其基礎上,增加了 const 屬性,不能用于修改元素, |
| cend() | 和 end() 功能相同,只不過在其基礎上,增加了 const 屬性,不能用于修改元素, |
| crbegin() | 和 rbegin() 功能相同,只不過在其基礎上,增加了 const 屬性,不能用于修改元素, |
| crend() | 和 rend() 功能相同,只不過在其基礎上,增加了 const 屬性,不能用于修改元素, |
| size() | 回傳實際元素個數, |
| max_size() | 回傳元素個數的最大值,這通常是一個很大的值,一般是 232-1,所以我們很少會用到這個函式, |
| resize() | 改變實際元素的個數, |
| capacity() | 回傳當前容量, |
| empty() | 判斷容器中是否有元素,若無元素,則回傳 true;反之,回傳 false, |
| reserve() | 增加容器的容量, |
| shrink _to_fit() | 將記憶體減少到等于當前元素實際所使用的大小, |
| operator[ ] | 多載了 [ ] 運算子,可以向訪問陣列中元素那樣,通過下標即可訪問甚至修改 vector 容器中的元素, |
| at() | 使用經過邊界檢查的索引訪問元素, |
| front() | 回傳第一個元素的參考, |
| back() | 回傳最后一個元素的參考, |
| data() | 回傳指向容器中第一個元素的指標, |
| assign() | 用新元素替換原有內容, |
| push_back() | 在序列的尾部添加一個元素, |
| pop_back() | 移出序列尾部的元素, |
| insert() | 在指定的位置插入一個或多個元素, |
| erase() | 移出一個元素或一段元素, |
| clear() | 移出所有的元素,容器大小變為 0, |
| swap() | 交換兩個容器的所有元素, |
| emplace() | 在指定的位置直接生成一個元素, |
| emplace_back() | 在序列尾部生成一個元素, |
| 語法格式 | 用法說明 |
|---|---|
| iterator insert(pos,elem) | 在迭代器 pos 指定的位置之前插入一個新元素elem,并回傳表示新插入元素位置的迭代器, |
| iterator insert(pos,n,elem) | 在迭代器 pos 指定的位置之前插入 n 個元素 elem,并回傳表示第一個新插入元素位置的迭代器, |
| iterator insert(pos,first,last) | 在迭代器 pos 指定的位置之前,插入其他容器(不僅限于vector)中位于 [first,last) 區域的所有元素,并回傳表示第一個新插入元素位置的迭代器, |
| iterator insert(pos,initlist) | 在迭代器 pos 指定的位置之前,插入初始化串列(用大括號{}括起來的多個元素,中間有逗號隔開)中所有的元素,并回傳表示第一個新插入元素位置的迭代器, |
| erase(pos) | 洗掉 vector 容器中 pos 迭代器指定位置處的元素,并回傳指向被洗掉元素下一個位置元素的迭代器,該容器的大小(size)會減 1,但容量(capacity)不會發生改變, |
|---|---|
| erase(beg,end) | 洗掉 vector 容器中位于迭代器 [beg,end)指定區域內的所有元素,并回傳指向被洗掉區域下一個位置元素的迭代器,該容器的大小(size)會減小,但容量(capacity)不會發生改變, |
| remove() | 洗掉容器中所有和指定元素值相等的元素,并回傳指向最后一個元素下一個位置的迭代器,值得一提的是,呼叫該函式不會改變容器的大小和容量, |
| clear() | 洗掉 vector 容器中所有的元素,使其變成空的 vector 容器,該函式會改變 vector 的大小(變為 0),但不是改變其容量, |
使用revise方法避免不必要擴容
不要使用vector<bool>
deque沒有data()和capacity()函式,但是它的前端插入比vector快
array:還支持比較功能和字串比較差不多
初始化:std::array<double, 10> values {0.5,1.0,1.5,,2.0};類似普通陣列初始化
| 成員函式 | 功能 |
|---|---|
| begin() | 回傳指向容器中第一個元素的隨機訪問迭代器, |
| end() | 回傳指向容器最后一個元素之后一個位置的隨機訪問迭代器,通常和 begin() 結合使用, |
| rbegin() | 回傳指向最后一個元素的隨機訪問迭代器,需要注意的是,在使用反向迭代器進行 ++ 或 – 運算時,++ 指的是迭代器向左移動一位,-- 指的是迭代器向右移動一位,即這兩個運算子的功能也“互換”了, |
| rend() | 回傳指向第一個元素之前一個位置的隨機訪問迭代器, |
| cbegin() | 和 begin() 功能相同,只不過在其基礎上增加了 const 屬性,不能用于修改元素, |
| cend() | 和 end() 功能相同,只不過在其基礎上,增加了 const 屬性,不能用于修改元素, |
| crbegin() | 和 rbegin() 功能相同,只不過在其基礎上,增加了 const 屬性,不能用于修改元素, |
| crend() | 和 rend() 功能相同,只不過在其基礎上,增加了 const 屬性,不能用于修改元素, |
| size() | 回傳容器中當前元素的數量,其值始終等于初始化 array 類的第二個模板引數 N, |
| max_size() | 回傳容器可容納元素的最大數量,其值始終等于初始化 array 類的第二個模板引數 N, |
| empty() | 判斷容器是否為空,和通過 size()==0 的判斷條件功能相同,但其效率可能更快, |
| at(n) | 回傳容器中 n 位置處元素的參考,該函式自動檢查 n 是否在有效的范圍內,如果不是則拋出 out_of_range 例外,和[]類似,只是中括號不檢查 |
| front() | 回傳容器中第一個元素的直接參考,該函式不適用于空的 array 容器, |
| back() | 回傳容器中最后一個元素的直接應用,該函式同樣不適用于空的 array 容器, |
| data() | 回傳一個指向容器首個元素的指標,利用該指標,可獲得容器中的各個元素從而實作復制容器中所有元素等類似功能, |
| fill(val) | 將 val 這個值賦值給容器中的每個元素, |
| array1.swap(array2) | 交換 array1 和 array2 容器中的所有元素,但前提是它們具有相同的長度和型別, |
array、vector 和 deque 容器的函式成員
| 函式成員 | 函式功能 | array<T,N> | vector | deque |
|---|---|---|---|---|
| begin() | 回傳指向容器中第一個元素的迭代器, | 是 | 是 | 是 |
| end() | 回傳指向容器最后一個元素所在位置后一個位置的迭代器,通常和 begin() 結合使用, | 是 | 是 | 是 |
| rbegin() | 回傳指向最后一個元素的迭代器, | 是 | 是 | 是 |
| rend() | 回傳指向第一個元素所在位置前一個位置的迭代器, | 是 | 是 | 是 |
| cbegin() | 和 begin() 功能相同,只不過在其基礎上,增加了 const 屬性,不能用于修改元素, | 是 | 是 | 是 |
| cend() | 和 end() 功能相同,只不過在其基礎上,增加了 const 屬性,不能用于修改元素, | 是 | 是 | 是 |
| crbegin() | 和 rbegin() 功能相同,只不過在其基礎上,增加了 const 屬性,不能用于修改元素, | 是 | 是 | 是 |
| crend() | 和 rend() 功能相同,只不過在其基礎上,增加了 const 屬性,不能用于修改元素, | 是 | 是 | 是 |
| assign() | 用新元素替換原有內容, | - | 是 | 是 |
| operator=() | 復制同型別容器的元素,或者用初始化串列替換現有內容, | 是 | 是 | 是 |
| size() | 回傳實際元素個數, | 是 | 是 | 是 |
| max_size() | 回傳元素個數的最大值,這通常是一個很大的值,一般是 232-1,所以我們很少會用到這個函式, | 是 | 是 | 是 |
| capacity() | 回傳當前容量, | - | 是 | - |
| empty() | 判斷容器中是否有元素,若無元素,則回傳 true;反之,回傳 false, | 是 | 是 | 是 |
| resize() | 改變實際元素的個數, | - | 是 | 是 |
| shrink\ _to_fit() | 將記憶體減少到等于當前元素實際所使用的大小, | - | 是 | 是 |
| front() | 回傳第一個元素的參考, | 是 | 是 | 是 |
| back() | 回傳最后一個元素的參考, | 是 | 是 | 是 |
| operator | 使用索引訪問元素, | 是 | 是 | 是 |
| at() | 使用經過邊界檢査的索引訪問元素, | 是 | 是 | 是 |
| push_back() | 在序列的尾部添加一個元素, | - | 是 | 是 |
| insert() | 在指定的位置插入一個或多個元素, | - | 是 | 是 |
| emplace() | 在指定的位置直接生成一個元素, | - | 是 | 是 |
| emplace_back() | 在序列尾部生成一個元素, | - | 是 | 是 |
| pop_back() | 移出序列尾部的元素, | - | 是 | 是 |
| erase() | 移出一個元素或一段元素, | - | 是 | 是 |
| clear() | 移出所有的元素,容器大小變為 0, | - | 是 | 是 |
| swap() | 交換兩個容器的所有元素, | 是 | 是 | 是 |
| data() | 回傳指向容器中第一個元素的指標, | 是 | 是 | - |
deque:
| 函式成員 | 函式功能 |
|---|---|
| begin() | 回傳指向容器中第一個元素的迭代器, |
| end() | 回傳指向容器最后一個元素所在位置后一個位置的迭代器,通常和 begin() 結合使用, |
| rbegin() | 回傳指向最后一個元素的迭代器, |
| rend() | 回傳指向第一個元素所在位置前一個位置的迭代器, |
| cbegin() | 和 begin() 功能相同,只不過在其基礎上,增加了 const 屬性,不能用于修改元素, |
| cend() | 和 end() 功能相同,只不過在其基礎上,增加了 const 屬性,不能用于修改元素, |
| crbegin() | 和 rbegin() 功能相同,只不過在其基礎上,增加了 const 屬性,不能用于修改元素, |
| crend() | 和 rend() 功能相同,只不過在其基礎上,增加了 const 屬性,不能用于修改元素, |
| size() | 回傳實際元素個數, |
| max_size() | 回傳容器所能容納元素個數的最大值,這通常是一個很大的值,一般是 232-1,我們很少會用到這個函式, |
| resize() | 改變實際元素的個數, |
| empty() | 判斷容器中是否有元素,若無元素,則回傳 true;反之,回傳 false, |
| shrink _to_fit() | 將記憶體減少到等于當前元素實際所使用的大小, |
| at() | 使用經過邊界檢查的索引訪問元素, |
| front() | 回傳第一個元素的參考, |
| back() | 回傳最后一個元素的參考, |
| assign() | 用新元素替換原有內容, |
| push_back() | 在序列的尾部添加一個元素, |
| push_front() | 在序列的頭部添加一個元素, |
| pop_back() | 移除容器尾部的元素, |
| pop_front() | 移除容器頭部的元素, |
| insert() | 在指定的位置插入一個或多個元素, |
| erase() | 移除一個元素或一段元素, |
| clear() | 移出所有的元素,容器大小變為 0, |
| swap() | 交換兩個容器的所有元素, |
| emplace() | 在指定的位置直接生成一個元素, |
| emplace_front() | 在容器頭部生成一個元素,和 push_front() 的區別是,該函式直接在容器頭部構造元素,省去了復制移動元素的程序, |
| emplace_back() | 在容器尾部生成一個元素,和 push_back() 的區別是,該函式直接在容器尾部構造元素,省去了復制移動元素的程序, |
| 和 vector 相比,額外增加了實作在容器頭部添加和洗掉元素的成員函式,同時洗掉了 capacity()、reserve() 和 data() 成員函式, |
stack
| 成員函式 | 功能 |
|---|---|
| empty() | 當 stack 堆疊中沒有元素時,該成員函式回傳 true;反之,回傳 false, |
| size() | 回傳 stack 堆疊中存盤元素的個數, |
| top() | 回傳一個堆疊頂元素的參考,型別為 T&,如果堆疊為空,程式會報錯, |
| push(const T& val) | 先復制 val,再將 val 副本壓入堆疊頂,這是通過呼叫底層容器的 push_back() 函式完成的, |
| push(T&& obj) | 以移動元素的方式將其壓入堆疊頂,這是通過呼叫底層容器的有右值參考引數的 push_back() 函式完成的, |
| pop() | 彈出堆疊頂元素, |
| emplace(arg…) | arg… 可以是一個引數,也可以是多個引數,但它們都只用于構造一個物件,并在堆疊頂直接生成該物件,作為新的堆疊頂元素, |
| swap(stack & other_stack) | 將兩個 stack 配接器中的元素進行互換,需要注意的是,進行互換的 2 個 stack 配接器中存盤的元素型別以及底層采用的基礎容器型別,都必須相同, |
quene:
| 成員函式 | 功能 |
|---|---|
| empty() | 如果 queue 中沒有元素的話,回傳 true, |
| size() | 回傳 queue 中元素的個數, |
| front() | 回傳 queue 中第一個元素的參考,如果 queue 是常量,就回傳一個常參考;如果 queue 為空,回傳值是未定義的, |
| back() | 回傳 queue 中最后一個元素的參考,如果 queue 是常量,就回傳一個常參考;如果 queue 為空,回傳值是未定義的, |
| push(const T& obj) | 在 queue 的尾部添加一個元素的副本,這是通過呼叫底層容器的成員函式 push_back() 來完成的, |
| emplace() | 在 queue 的尾部直接添加一個元素, |
| push(T&& obj) | 以移動的方式在 queue 的尾部添加元素,這是通過呼叫底層容器的具有右值參考引數的成員函式 push_back() 來完成的, |
| pop() | 洗掉 queue 中的第一個元素, |
| swap(queue &other_queue) | 將兩個 queue 容器配接器中的元素進行互換,需要注意的是,進行互換的 2 個 queue 容器配接器中存盤的元素型別以及底層采用的基礎容器型別,都必須相同, |
priority_queue<int,vector
| 成員函式 | 功能 |
|---|---|
| empty() | 如果 queue 中沒有元素的話,回傳 true, |
| size() | 回傳 queue 中元素的個數, |
| front() | 回傳 queue 中第一個元素的參考,如果 queue 是常量,就回傳一個常參考;如果 queue 為空,回傳值是未定義的, |
| back() | 回傳 queue 中最后一個元素的參考,如果 queue 是常量,就回傳一個常參考;如果 queue 為空,回傳值是未定義的, |
| push(const T& obj) | 在 queue 的尾部添加一個元素的副本,這是通過呼叫底層容器的成員函式 push_back() 來完成的, |
| emplace() | 在 queue 的尾部直接添加一個元素, |
| push(T&& obj) | 以移動的方式在 queue 的尾部添加元素,這是通過呼叫底層容器的具有右值參考引數的成員函式 push_back() 來完成的, |
| pop() | 洗掉 queue 中的第一個元素, |
| swap(queue &other_queue) | 將兩個 queue 容器配接器中的元素進行互換,需要注意的是,進行互換的 2 個 queue 容器配接器中存盤的元素型別以及底層采用的基礎容器型別,都必須相同, |
| 和 stack 一樣,queue 也沒有迭代器,因此訪問元素的唯一方式是遍歷容器,通過不斷移除訪問過的元素,去訪問下一個元素, |
map
pair
#include <iostream>
#include <utility> // pair
#include <string> // string
using namespace std;
int main() {
// 呼叫建構式 1,也就是默認建構式
pair <string, double> pair1;
// 呼叫第 2 種建構式
pair <string, string> pair2("STL教程","http://c.biancheng.net/stl/");
// 呼叫拷貝建構式
pair <string, string> pair3(pair2);
//呼叫移動建構式
pair <string, string> pair4(make_pair("C++教程", "http://c.biancheng.net/cplus/"));
// 呼叫第 5 種建構式
pair <string, string> pair5(string("Python教程"), string("http://c.biancheng.net/python/"));
cout << "pair1: " << pair1.first << " " << pair1.second << endl;
cout << "pair2: "<< pair2.first << " " << pair2.second << endl;
cout << "pair3: " << pair3.first << " " << pair3.second << endl;
cout << "pair4: " << pair4.first << " " << pair4.second << endl;
cout << "pair5: " << pair5.first << " " << pair5.second << endl;
return 0;
}
//pair類模板還提供有一個 swap() 成員函式,能夠互換 2 個 pair 物件的鍵值對,其操作成功的前提是這 2 個 pair 物件的鍵和值的型別要相同,
unordered_map和unordered_set
C++ STL關聯式容器(map,set)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/545419.html
標籤:其他
上一篇:編程語言的基本資料型別介紹
下一篇:Pytest 韌體
