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