c语言vector实现
时间: 2023-10-25 07:04:26 浏览: 161
C语言中,没有内置的向量(vector)类型,但我们可以使用结构体和动态内存分配来实现类似的功能。
首先,我们可以定义一个结构体来表示向量,该结构体包含一个指向元素的指针、向量的当前大小和容量。在创建向量时,需要指定容量,并为元素分配内存。
下面是一个简单的C语言向量的实现示例:
```C
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int *elements;
int size;
int capacity;
} Vector;
// 初始化向量
void initVector(Vector *vector, int capacity) {
vector->size = 0;
vector->capacity = capacity;
vector->elements = (int *)malloc(sizeof(int) * capacity);
}
// 向向量尾部添加元素
void pushBack(Vector *vector, int element) {
// 如果向量已满,需要增加容量
if (vector->size == vector->capacity) {
vector->capacity *= 2;
vector->elements = (int *)realloc(vector->elements, sizeof(int) * vector->capacity);
}
vector->elements[vector->size++] = element;
}
// 获取向量中指定位置的元素
int getElement(Vector *vector, int index) {
if (index < 0 || index >= vector->size) {
printf("Invalid index!\n");
return -1;
}
return vector->elements[index];
}
// 打印向量中的所有元素
void printVector(Vector *vector) {
printf("Vector elements: ");
for (int i = 0; i < vector->size; i++) {
printf("%d ", vector->elements[i]);
}
printf("\n");
}
// 释放向量内存
void freeVector(Vector *vector) {
free(vector->elements);
}
int main() {
Vector vector;
initVector(&vector, 10);
pushBack(&vector, 1);
pushBack(&vector, 2);
pushBack(&vector, 3);
printVector(&vector);
printf("Element at index 1: %d\n", getElement(&vector, 1));
freeVector(&vector);
return 0;
}
```
上述示例中,我们定义了一个向量结构体`Vector`,并实现了向量的初始化、向尾部添加元素、获取指定位置元素、打印向量元素和释放向量内存等功能。
虽然C语言没有内置的向量类型,但通过使用结构体和动态内存分配,我们可以实现自己的向量功能。以上是一个简单的C语言向量实现示例,可以根据具体需求进行扩展和优化。
阅读全文