第二部分《容器和演算法》 順序容器

2021-06-22 03:30:20 字數 1213 閱讀 4992

標準庫定義了三種順序容器:vector,list,deque;同時標準庫還提供了三種容器介面卡(adaptor),介面卡是根據原始的容器型別所提供的操作,通過定義新的操作介面,來適應基礎的容器型別。順序容器介面卡包括stack、queue、priority_queue型別。

1.利用迭代器來進行元素的傳遞

利用迭代器來進行傳遞的時候,不要求容器型別相同。容器內的元素型別也可以不相同,只要他們相互相容就可以,能夠將要複製的元素轉換為所構建的新容器的元素型別,即可以實現複製。

eg:listslist(svec.begin(),svec.end()); vector::iterator mid=svec.begin()+svec.size()/2; dequefront(svec.begin(),mid);

2.允許通過使用內建陣列中的一對指標初始化容器

char *words=;size_t words_size=sizeof(words)/sizeof(char *);listwords2(words,words+words_size);

3.迭代器和迭代器的範圍

3.1 迭代器提供前置和後置的自增和自減運算以及相等不相等的運算

3.2 vector deque容器支援額外的迭代器算術運算和關係操作符(兩個迭代器指向同乙個容器)

iter (+/-)n     iter1-iter2    >,>=,<,<=

因為只有這兩種容器為其元素提供快速、隨機的訪問。

3.3 容器定義的型別別名

value_type:元素型別 ;reference: 元素的左值型別,是value_type&的同義詞;

4.如何選擇乙個合適的順序容器

如果無法確定某種應用應該採用哪種容器時,則編寫**時嘗試只使用vector和list容器提供的操作,使用迭代器而不是下標,並且避免隨機訪問元素。這樣可以很方便將程式從vector容器修改為使用list容器。

5.容器介面卡

介面卡相當於乙個轉化器,讓一種已經存在的容器型別採用另一種不同的抽象型別的工作方式實現

順序容器介面卡:queue,priority_queue,stack

stack棧可以建立在vector,list或者deque容器上。預設的stack基於deque容器上實現。

queue介面卡要求其關聯的基礎容器必須提供push_front運算。

priority_queue介面卡要求提供隨機訪問功能,建立在vector或deque容器上,預設在vector容器上。

Primer STL筆記第二部分容器與演算法

9.1順序容器的定義 要定義乙個容器型別的物件筆下那個先包含相關的容器標頭檔案。所有容器型別都定義了預設建構函式,用於建立指定型別的空容器物件。預設建構函式不帶引數。為了使程式更清晰 簡短,容器型別最常用的建構函式是預設建構函式。在大多數的程式中,使用預設建構函式能達到最佳執行時效能,並且使容器更容...

Web API 第二部分

web api 第二部分 元素偏移量 offset element.offsettop element.offsetleft element.offsetwidth 可以得到元素的大小 寬度和高度 是包含padding border width element.offsetheight elemen...

redux 第二部分

redux 的使用方法,為什麼使用 action.js 檔案,進行優化 將其分開,然後我們通過工廠函式的每次返回不同的物件,由於引數是固定的,每次返回的都是事件型別和事件資料,所以我們可以使用乙個函式,通過其返回值來返回乙個物件,讓後傳遞給 action 我們的 reducer 函式有兩個引數,引數...