1
0
forked from 131/lab5_ivec
Files
lab5_ivec/vector.h

65 lines
2.7 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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);