Last active
July 23, 2022 02:46
-
-
Save shun-shobon/06df2320b437fbe2a510a312dffe9abe to your computer and use it in GitHub Desktop.
C言語でベクタを実装してみました
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #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