在C語言中,我們可以使用動態內存分配來定義一個類似于vector的數組。
首先,我們需要定義一個結構體來表示這個數組,其中包含一個指向實際數據的指針和當前數組的長度和容量。
typedef struct {
int* data;
int size;
int capacity;
} Vector;
接下來,我們可以定義一些函數來對這個數組進行操作。
void initVector(Vector* vec) {
vec->data = NULL;
vec->size = 0;
vec->capacity = 0;
}
void addElement(Vector* vec, int element) {
if (vec->size >= vec->capacity) {
int new_capacity = vec->capacity * 2 + 1;
int* new_data = (int*)malloc(new_capacity * sizeof(int));
if (new_data == NULL) {
// 內存分配失敗的處理
return;
}
memcpy(new_data, vec->data, vec->size * sizeof(int));
free(vec->data);
vec->data = new_data;
vec->capacity = new_capacity;
}
vec->data[vec->size] = element;
vec->size++;
}
int getElement(Vector* vec, int index) {
if (index >= 0 && index < vec->size) {
return vec->data[index];
} else {
// 處理越界錯誤
return 0;
}
}
void deleteElement(Vector* vec, int index) {
if (index >= 0 && index < vec->size) {
for (int i = index; i < vec->size - 1; i++) {
vec->data[i] = vec->data[i + 1];
}
vec->size--;
if (vec->capacity > 2 * vec->size + 1) {
int new_capacity = (vec->size + 1) * 2 - 1;
int* new_data = (int*)malloc(new_capacity * sizeof(int));
if (new_data == NULL) {
// 內存分配失敗的處理
return;
}
memcpy(new_data, vec->data, vec->size * sizeof(int));
free(vec->data);
vec->data = new_data;
vec->capacity = new_capacity;
}
} else {
// 處理越界錯誤
return;
}
}
使用以上定義和函數,我們就可以像下面這樣定義和操作一個vector數組:
int main() {
Vector vec;
initVector(&vec);
addElement(&vec, 1);
addElement(&vec, 2);
addElement(&vec, 3);
printf("%d\n", getElement(&vec, 0)); // 輸出:1
printf("%d\n", getElement(&vec, 1)); // 輸出:2
printf("%d\n", getElement(&vec, 2)); // 輸出:3
deleteElement(&vec, 1);
printf("%d\n", getElement(&vec, 0)); // 輸出:1
printf("%d\n", getElement(&vec, 1)); // 輸出:3
return 0;
}
需要注意的是,以上代碼只是簡單示例,實際使用時還需要進行錯誤處理和內存釋放等操作。