UCC向量Vector分析

2021-08-04 16:08:07 字數 863 閱讀 4004

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是模...