Skip to content

Instantly share code, notes, and snippets.

@shun-shobon
Last active July 23, 2022 02:46
Show Gist options
  • Select an option

  • Save shun-shobon/06df2320b437fbe2a510a312dffe9abe to your computer and use it in GitHub Desktop.

Select an option

Save shun-shobon/06df2320b437fbe2a510a312dffe9abe to your computer and use it in GitHub Desktop.
C言語でベクタを実装してみました
#pragma once
// 可変長配列の宣言
#define VEC_DECLARE(T) \
typedef struct { \
size_t cap; \
size_t len; \
T *ptr; \
} vec_##T; \
void vec_init_##T(vec_##T *vec); \
void vec_push_##T(vec_##T *vec, T item); \
void vec_free_##T(vec_##T *vec);
// 可変長配列の実装
#define VEC_IMPL(T) \
void vec_init_##T(vec_##T *vec) { \
vec->cap = 1; \
vec->len = 0; \
vec->ptr = NULL; \
} \
void vec_push_##T(vec_##T *vec, T item) { \
vec->len += 1; \
if (vec->cap <= vec->len) { \
vec->cap *= 2; \
vec->ptr = realloc(vec->ptr, sizeof(T) * vec->cap); \
} \
vec->ptr[vec->len - 1] = item; \
} \
void vec_free_##T(vec_##T *vec) { free(vec->ptr); }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment