2022-04-16 02:49:23 +03:00
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
|
|
size_t n; // Текущее количество элементов векторе
|
|
|
|
|
|
size_t maxsz; // размер выделенного массива *data*
|
|
|
|
|
|
int *data; // массив с значениями
|
|
|
|
|
|
} ivector;
|
|
|
|
|
|
|
|
|
|
|
|
/* Инициализировать вектор */
|
|
|
|
|
|
void vector_init(ivector *v);
|
|
|
|
|
|
/* Инициализировать вектор, добавить в него значения из массива *arr*. Размер массива *arrsz* */
|
|
|
|
|
|
void vector_initdata(ivector *v, int *arr, size_t arrsz);
|
|
|
|
|
|
|
|
|
|
|
|
/* деинициализировать вектор, удалить все значения и освободить память */
|
|
|
|
|
|
void vector_free(ivector *v);
|
|
|
|
|
|
|
|
|
|
|
|
/* Получить размер вектора */
|
|
|
|
|
|
size_t vector_len(const ivector *v);
|
|
|
|
|
|
/* Получить указатель на данные, хранящиеся в векторе (поле *data*) */
|
|
|
|
|
|
int *vector_data(const ivector *v);
|
|
|
|
|
|
|
|
|
|
|
|
/* Изменить размер вектора до *n* элементов.
|
|
|
|
|
|
* занулить ранее не используемые элементы.
|
|
|
|
|
|
*/
|
|
|
|
|
|
void vector_resize(ivector *v, int n);
|
|
|
|
|
|
|
|
|
|
|
|
/* Заменить существующее значение по индексу *idx* на *val* */
|
|
|
|
|
|
void vector_set(ivector *v, size_t idx, int val);
|
|
|
|
|
|
|
|
|
|
|
|
/* получить значение по индексу *idx* */
|
|
|
|
|
|
int vector_get(const ivector *v, size_t idx);
|
|
|
|
|
|
|
|
|
|
|
|
/* Добавить значение *val* в конец вектора.
|
|
|
|
|
|
*/
|
|
|
|
|
|
void vector_push(ivector *v, int val);
|
|
|
|
|
|
|
|
|
|
|
|
/* Удалить последний элемент из вектора */
|
|
|
|
|
|
void vector_pop(ivector *v);
|
|
|
|
|
|
|
2023-04-14 17:18:19 +03:00
|
|
|
|
/* Добавить новое значение *val* по индексу *idx*.
|
|
|
|
|
|
* idx может быть в диапазоне [0; v->n].
|
|
|
|
|
|
*
|
|
|
|
|
|
* Элемент по индексу *idx* и все последующие двигаются "вправо", например
|
|
|
|
|
|
* Вектор, содержащий элементы {0, 1, 2, 3, 4}
|
|
|
|
|
|
* после выполнения
|
|
|
|
|
|
* vector_insert(&vec, 2, 42)
|
|
|
|
|
|
* Будет выглядить так {0, 1, 42, 2, 3, 4}
|
2022-04-16 02:49:23 +03:00
|
|
|
|
*/
|
|
|
|
|
|
void vector_insert(ivector *v, size_t idx, int val);
|
2023-04-14 17:18:19 +03:00
|
|
|
|
|
|
|
|
|
|
/* Удалить элемент под индексом idx из вектора
|
|
|
|
|
|
* idx может быть в диапазоне [0; v->n - 1]
|
|
|
|
|
|
*
|
|
|
|
|
|
* Все последующие после *idx* элементы двигаются "влево", например
|
|
|
|
|
|
* Вектор, содержащий элементы {0, 1, 42, 2, 3, 4}
|
|
|
|
|
|
* после выполнения
|
|
|
|
|
|
* vector_del(&vec, 2)
|
|
|
|
|
|
* Будет выглядить так {0, 1, 2, 3, 4}
|
|
|
|
|
|
*/
|
2022-04-16 02:49:23 +03:00
|
|
|
|
void vector_del(ivector *v, size_t idx);
|
|
|
|
|
|
|
|
|
|
|
|
/* очистить все элементы из вектора */
|
|
|
|
|
|
void vector_clear(ivector *v);
|
|
|
|
|
|
|