約定 口 = 1 Byte,用於具象化,方便眼睛對比長度; void = 空類型; C語言中,short、long、singned、unsigned都為說明符,可以改變標識符存儲大小; C語言中,在聲明整型變數時,如果聲明中已經有一個其他的(同等)說明符,那麼關鍵字int可以省略; C語言中,預設使 ...
僅自己回憶使用,若有侵權,聯繫刪除
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 =1.0;std::vector<double> 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)