优化容器创建逻辑

This commit is contained in:
2025-08-19 22:20:44 +08:00
parent 91f89d7218
commit 34b6a52d5d

View File

@@ -11,6 +11,13 @@
#include "vector.h"
#include <stdlib.h>
/**
* @brief 创建新的数组容器
*
* @param elem_size
* @param initial_capacity
* @return vector_t*
*/
vector_t *vector_create(size_t elem_size, size_t initial_capacity){
vector_t *vec = malloc(sizeof(vector_t));
if (!vec) return NULL;
@@ -21,13 +28,21 @@ vector_t *vector_create(size_t elem_size, size_t initial_capacity){
vec->capacity = initial_capacity > 0 ? initial_capacity : 1;
vec->data = malloc(vec->capacity * elem_size);
if (!vec->data) {
free(vec);
free(vec);//内存初始化失败释放vec
vec = NULL; // 确保vec为NULL以避免后续操作出现问题
return NULL;
}
return vec;
}
/**
* @brief 销毁容器
*
* @param vec
* @return true
* @return false
*/
bool vector_destroy(vector_t *vec) {
if (vec) {
if (!vec->data) {//虽然data指针可能为NULL但内存可以被释放
@@ -43,7 +58,7 @@ bool vector_destroy(vector_t *vec) {
/**
* @brief 向向量末尾添加元素
* @brief 向容器末尾添加元素
*
* @param vec
* @param elem
@@ -68,7 +83,7 @@ bool vector_push_back(vector_t *vec, const void *elem){
}
/**
* @brief
* @brief 从容器尾部删除元素
*
* @param vec
* @return true
@@ -77,7 +92,7 @@ bool vector_push_back(vector_t *vec, const void *elem){
bool vector_pop_back(vector_t *vec){
if (!vec || vec->size == 0) return false; // 检查vec是否为NULL或空
vec->size--;
vec->size--; // 减少元素数量
if (vec->size < vec->capacity / 4) {
size_t new_capacity = vec->capacity / 2;
if (new_capacity < 1) new_capacity = 1; // 确保容量至少为1