LOVEEVER 发表于 2025-8-14 15:00

动态数组的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;
}

AdaMaYun 发表于 2025-9-18 08:53

动态数组使用非常简单方便

小夏天的大西瓜 发表于 2025-9-28 17:40

动态数组的C语言实现

OKAKAKO 发表于 2025-10-19 23:01

动态数组的C语言实现

中国龙芯CDX 发表于 2025-10-24 14:24

支持任意类型的动态数组,接口风格类似C++ vector
页: [1]
查看完整版本: 动态数组的C语言实现