C 學習筆記(一) 初探容器

2021-06-23 04:04:12 字數 1565 閱讀 4707

定義:

vector是容納特定型別物件的集合, 

它根據位置來儲存和訪問這些元素, 這就是順序容器, 順序容器的排序次序與元素值無關, 而是由元素新增到容器裡的次序決定的

談談標準庫:

標準庫定義了三種順序容器型別:vector  list  deque(雙端佇列)  

它們的差異:

它們的差別在於訪問元素的方式,以及新增或刪除元素相關的操作的執行代價

標準庫還提供了三種容器介面卡: 介面卡是根據原始的容器型別所提供的操作, 通過定義新的操作介面, 來適應基礎的容器型別

順序容器介面卡包括: stack、queue和priority_queue型別

順序容器型別所包含的標頭檔案: #include , , .

注意: 所有容器都是類模板。

容器既然是類模板,那麼就是類, 就有類的性質, 就有初始化:

cc;   預設初始化

c  c(c2);    建立容器c2的副本

c  c(b, e);   b, e為兩個迭代器, 使用迭代器時,不要型別相同

c  c(n, t);   建立n個值為t的元素建立容器c

c  c(n);  建立有n個值初始化

容器的迭代器就是乙個靜態成員:

vector::iterator mid  //它的功能是指定迭代器的位置並對資料進行訪問

迭代器介紹:

標準庫為每一種標準容器定義了一種迭代器型別。 它提供了比下標操作更通用化的方法

因此,如果從下標訪問這個角度看:  它應該是乙個指標

每乙個容器都提供了開始和結束操作, 插入和刪除操作, 檢測大小操作

如果迭代器是從開始進行, 可以為:

vector::iterator iter=ivec.begin();     

容器內元素的型別約束:

滿足兩個約束: 1 必須支援賦值操作 2 元素型別的物件必須可以複製

除了引用型別, 所有內建或復合型別都可以用作元素型別。標準庫里,除了io型別之外,其它都是有效的容器元素型別。 包括容器本身

上述是容器要求元素型別的最低要求, 一些容器為了滿足特殊的操作, 還需要元素型別滿足特殊要求

假設: 類foo沒有預設建構函式, 即它不能通過以下操作初始化  foo foo; 因為他沒有預設建構函式,因此系統不會預設給值

但是它定義了乙個需要int形參的建構函式, 即foo foo(1).

如果考慮乙個foo型別的容器, 那麼就有

vectorempty;  該操作表示沒有進行任何初始化操作, 即該容器有0個元素, 這是可以的

vectorbad(10), 該操作表示給vector容器建立了 10個foo型別的元素, 但是這10個foo型別的元素沒有進行初始化, 這是肯定不行的。

一種比較好的方式是: vectorbad(10,1) 表示建立了10個初始化為1的foo型別。

容器的容器:

這個目前還想不到有何必要  大體可以寫成如下格式:

vector< vector> lines

注意: 不要寫成  vector< vector> lines 編譯器會把》當中位位移

C 學習筆記 容器

容器是資料結構,是包含物件的物件。容器型別 標頭檔案描述 vector 順序容器 vector 按需要伸縮的陣列 deque 順序容器 deque 兩端進行有效插入 刪除的陣列 list 順序容器 list 雙向鍊錶,可從任意一段開始遍歷,但需要按照順序訪問容器 set關聯容器 set不含重複的集合...

初探C 類模版學習筆記

實現 在定義類的時候給它乙個或多個引數,這個些引數表示不同的資料型別。抽象的類。在呼叫類模板時,指定引數,由編譯系統依據引數提供的資料型別自己主動產生對應的模板類 詳細的類。c 的類模板的寫法例如以下 template 型別參數列 型別參數列的寫法就是 class 型別引數1,class 型別引數2...

C 學習筆記(二) IL初探

繼續學習il 現在我們看下常用的屬性器到底是怎麼執行的 c 如下 using system private int val public intgetval class program 執行結果 反編譯後拿到il 如下 end of method myclass ctor method privat...