定義:
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...