十章 札記 C primer 之旅

2021-06-07 19:51:30 字數 1992 閱讀 7855

兩個基本的關聯容器:

map:            關聯陣列, 元素通過鍵來儲存和讀取

set:              集合, 

multimap:     同乙個鍵可多次出現的map

multiset:       同乙個鍵可多次出現的set

pair型別 : 標頭檔案  utility 

map 型別: 標頭檔案 map

建構函式:

mapm;     

mapm(m2);     建立m2的副本

mapm(b,e);    儲存迭代器b 和 e 標誌的範圍內的元素的副本。元素的型別必須能轉換成pair

鍵型別的約束:

關聯容器中,鍵不但有乙個型別,還有乙個相關的比較函式。

唯一的約束是必須支援< 操作符,支援其他的關係或相等運算,不做要求

map 定義的型別:

map::key_type           map容器中,用作索引的鍵的型別

map::value_type        pair 型別,     first 元素具有constmap::key_type 型別 ;second

注意:value_type 是pair 型別,它的值成員可以修改,但鍵成員不可以。

map迭代器 解引用 是 pair 型別的物件

給map 新增元素:

1、使用下標訪問map物件。

注意:用下標訪問不存在的元素會導致在map容器中新增乙個新的元素,鍵為下標值。

下標操作符返回的值 與 對 map迭代器進行解引用獲得的型別不用。

區別:

map::insert 

1)m.insert(e): e 的型別是 在m上的value_type 型別。

鍵(e.first) 不在m中: 插入值為 e.second 的新元素

鍵(e.first) 已在m中: 保持m不變

返回值: 乙個pair型別。 《指向鍵為e.first的元素的迭代器, bool型別》

m中是否存在 鍵 e.first 返回值的區別:不在的話 返回值pair 裡面的bool為假,否則為真

ex: mapword_count;

word_count.insert( map::value_type("anna",1));

簡化的:    

word_count.insert( make_pair("anna",1) );

typedefmap::value_typevaltype

word_count.insert( valtype("anna",1));

上面的插入返回的pair 型別如下:

pair< map::iterator, bool>

2)m.insert(beg,end);  插入beg 和 end 範圍內的元素的副本, 型別必須是m.value_type。

返回void     

3)m.insert(iter,e)       跟第乙個插入方式一樣,iter 的作用不是很明白。

查詢並讀取map 的元素:

m.count(k)           返回m中k的出現次數

m.find(k)             如果存在k索引的元素,返回指向該元素的迭代器。否則,返回超出末端迭代器。

map 中刪除元素:

m.erase(k)           刪除m中 鍵為 k 的元素。返回刪除的元素個數,型別:size_type

m.erase(p)          刪除 迭代器p指向的元素,返回void

m.erase(b,e)        刪除 b e之間的元素副本,返回void

再次記住: const string &  可以用實參string 或 c_str  c 風格字串 傳遞引數。

四章 札記 C primer 之旅

陣列的型別 不能是引用。即不存在引用的陣列。陣列 char s c 等價於 char s2 陣列下標的正確型別是 size t 指標 理解指標宣告語句時,從右往左閱讀。ex string pstring 把 pstring 定義為 指向string 的指標。有效的指標 的三種狀態 1 乙個特定物件的...

c primer 筆記,第十章(泛型演算法)

accumulate第三個三處所傳的儲值的型別必須定義了 運算子,例如 將空串當作乙個字面值傳給第三個引數是不可以的 會導致編譯錯誤,const char 上並沒有定義 運算子 string sum accumulate v.cbegin v.cend string上定義了 運算子 string s...

c primer 第十章泛型演算法lambda

謂詞是乙個呼叫表示式,其返回結果是乙個能用做條件的值。標準庫演算法為此分為兩類 1 一元謂詞 意味著只能接受單一引數 2 二元謂詞 意味著他們有兩個引數 接受謂詞的演算法對輸入序列中的元素呼叫謂詞。因此元素型別必須能轉換為謂詞的引數型別。以sort和isshorter舉例 eg bool issho...