#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); /* Добавить новое значение *val* по индексу *idx*. * idx может быть в диапазоне [0; v->n]. * * Элемент по индексу *idx* и все последующие двигаются "вправо", например * Вектор, содержащий элементы {0, 1, 2, 3, 4} * после выполнения * vector_insert(&vec, 2, 42) * Будет выглядить так {0, 1, 42, 2, 3, 4} */ void vector_insert(ivector *v, size_t idx, int val); /* Удалить элемент под индексом idx из вектора * idx может быть в диапазоне [0; v->n - 1] * * Все последующие после *idx* элементы двигаются "влево", например * Вектор, содержащий элементы {0, 1, 42, 2, 3, 4} * после выполнения * vector_del(&vec, 2) * Будет выглядить так {0, 1, 2, 3, 4} */ void vector_del(ivector *v, size_t idx); /* очистить все элементы из вектора */ void vector_clear(ivector *v);