动态数组的C语言实现
动态数组(dynarray.h/.c)支持任意类型的动态数组,接口风格类似C++ vector。
// dynarray.h
#ifndef DYNARRAY_H
#define DYNARRAY_H
#include <stddef.h>
typedefstruct {
void *data;
size_t elem_size;
size_t size;
size_t capacity;
} dynarray_t;
voiddynarray_init(dynarray_t *arr, size_t elem_size);
voiddynarray_free(dynarray_t *arr);
intdynarray_push_back(dynarray_t *arr, const void *elem);
void *dynarray_at(dynarray_t *arr, size_t idx);
#endif
// dynarray.c
#include "dynarray.h"
#include <stdlib.h>
#include <string.h>
voiddynarray_init(dynarray_t *arr, size_t elem_size) {
arr->data = NULL; arr->elem_size = elem_size; arr->size = 0; arr->capacity = 0;
}
voiddynarray_free(dynarray_t *arr) { free(arr->data); arr->data = NULL; arr->size = arr->capacity = 0; }
intdynarray_push_back(dynarray_t *arr, const void *elem) {
if (arr->size == arr->capacity) {
size_t newcap = arr->capacity ? arr->capacity * 2 : 4;
void *newdata = realloc(arr->data, newcap * arr->elem_size);
if (!newdata) return-1;
arr->data = newdata; arr->capacity = newcap;
}
memcpy((char*)arr->data + arr->size * arr->elem_size, elem, arr->elem_size);
arr->size++;
return0;
}
void *dynarray_at(dynarray_t *arr, size_t idx) {
return (idx < arr->size) ? (char*)arr->data + idx * arr->elem_size : NULL;
}
动态数组使用非常简单方便 动态数组的C语言实现 动态数组的C语言实现 支持任意类型的动态数组,接口风格类似C++ vector
页:
[1]