c语言怎么用vector「c语言怎么用scanf输入数组」
C语言是一种通用的、过程式的计算机编程语言,广泛应用于各种领域,在C语言中,vector是一种动态数组,可以在运行时自动调整大小,本文将详细介绍如何在C语言中使用vector。
(图片来源网络,侵删)
vector简介
vector是C++标准库中的一个容器,它可以存储任意类型的元素,如整数、浮点数、字符串等,vector的特点是可以在运行时自动调整大小,当向vector中添加元素时,如果当前容量不足以容纳新元素,vector会自动扩容,同样,当vector中的元素被删除时,如果当前容量大于所需容量,vector会自动缩容,这种动态调整大小的特性使得vector非常适合用于存储需要频繁插入和删除元素的序列。
如何在C语言中使用vector
由于C语言本身没有提供vector容器,我们需要自己实现一个,下面是一个简单的C语言版本的vector实现:
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct { void *data; // 存储数据的指针 int size; // 当前vector的大小 int capacity; // vector的容量 } Vector; // 初始化vector void vector_init(Vector *v, int initial_capacity) { v>data = malloc(initial_capacity * sizeof(void *)); v>size = 0; v>capacity = initial_capacity; } // 释放vector内存 void vector_free(Vector *v) { free(v>data); v>data = NULL; v>size = 0; v>capacity = 0; } // 获取vector的大小 int vector_size(const Vector *v) { return v>size; } // 获取vector的容量 int vector_capacity(const Vector *v) { return v>capacity; } // 检查vector是否为空 int vector_empty(const Vector *v) { return v>size == 0; } // 向vector中添加元素 void vector_push_back(Vector *v, const void *element) { if (v>size == v>capacity) { // 如果当前容量不足以容纳新元素,扩容 v>capacity *= 2; v>data = realloc(v>data, v>capacity * sizeof(void *)); } v>data[v>size++] = element; // 添加元素并更新大小 } // 从vector中删除最后一个元素 void vector_pop_back(Vector *v) { if (!vector_empty(v)) { // 如果vector不为空,才执行删除操作 v>size; // 更新大小 } }
使用示例
下面是一个简单的使用上述vector实现的示例:
#include <stdio.h> #include "vector.h" // 引入我们自己实现的vector头文件 int main() { Vector v; // 创建一个vector实例 vector_init(&v, 4); // 初始化vector,初始容量为4个元素的空间 for (int i = 0; i < 5; i++) { // 向vector中添加5个元素,此时会触发扩容操作 vector_push_back(&v, &i); // 注意传递的是元素的地址,而不是值本身,因为我们需要修改这个地址指向的值(即数组中的值)来表示向量的大小和容量的变化,这里我们用&i表示i的地址,实际上,我们可以将i的类型改为int *来避免这个问题,但是为了简单起见,我们在这里仍然使用int类型。 } printf("Size: %d, Capacity: %d ", vector_size(&v), vector_capacity(&v)); // 输出vector的大小和容量,结果应为5和8(因为我们触发了扩容操作) vector_pop_back(&v); // 删除最后一个元素,此时向量的大小变为4,容量不变(因为不需要缩容) printf("Size: %d, Capacity: %d ", vector_size(&v), vector_capacity(&v)); // 输出vector的大小和容量,结果应为4和8(因为我们没有触发缩容操作) vector_free(&v); // 释放vector内存 return 0; }
通过上述实现和示例,我们可以看到,虽然C语言本身没有提供vector容器,但我们可以通过自己实现一个简单的版本来满足需求,当然,这个实现非常简单,还有很多可以改进的地方,例如支持随机访问、优化扩容策略等,但无论如何,这个实现已经足够让我们了解如何在C语言中使用类似vector的数据结构了。