1. vector的意義與定義
vector表示可變長度的物件指標陣列向量,定義如下,
typedef struct vector
*vector;
data, 表示物件指標陣列的首位址.
len, 表示陣列中指標的數量.
size, 表示陣列的最大容量.
2. vector的操作
vector定義了一系列的操作,獲取陣列項的數目,插入新的項,獲取指定的項,遍歷陣列項.
2.1 獲取vector的長度
#define len(v) (v->len)
2.2 插入新的項
#define insert_item(v, item) \
do while (0)
首先檢查陣列是否已滿,如果沒有空閒空間,需要先擴充套件vector空間。
將新的項置於陣列向量末尾,最後將長度加一。
2.3 根據索引獲取向量元素
#define get_item(v, i) (v->data[i])
2.4 向量的遍歷
#define for_each_item(ty, item, v) \
\}定義foreach語義,使用巨集實現的方式.
3. vector的初始化與擴容
3.1 vector的初始化
vector從當前的heap中,分配struct vector結構和內部向量陣列,並將長度初始化為0.
3.2 vector的擴容
void expandvector(vector v)
將向量擴容,首先從當前的heap中分配兩倍於原來陣列容量的新陣列,將老陣列的項複製到新陣列,並將容量翻倍。
注意,陣列擴容沒有將老的內部陣列記憶體釋放。
UCC編譯驅動分析
1.ucc的組成 ucc編譯後,生成乙個c語言編譯器ucl和編譯驅動ucc,ucl執行時將輸入的c原始檔編譯輸出預處理檔案,而ucc則分析輸入引數,根據引數呼叫 具。2.預備知識 2.1 編譯的流程 通常,當需要編譯c原始檔時,只需要執行gcc cc即可。實際上,gcc是乙個編譯驅動程式,它會依據編...
vector向量容器
vector容器是陣列的乙個泛化推廣,不僅可以像陣列那樣進行元素的隨機訪問,還可以在容器的尾端插入新元素,實現了random access container和back insertion sequence概念。vector具有自動的記憶體管理功能,對於元素的插入和刪除,能夠動態調整占用的記憶體空間...
向量vector理解
學習總結vector vector是一種向量型別,它是一種物件實體,可以容納許多種其他型別實體,稱其為容器。vector是c stl的重要一員,使用時包含標頭檔案 include vector可以有四種定義方式 1 vectora 10 定義了10個整數元素的向量,但並沒有給出初值,vector是模...