typedef struct {
void** data;
int size;
int count;
} vector;
void vector_create(vector*);//Создание вектора
int vector_count(vector*);//Информация о количестве элементов в векторе
void vector_push_back(vector*, void*);//Добавление элемента в конец вектора
void vector_set(vector*, int, void*);//Замена определенного элемента в векторе на другое значение
void* vector_get(vector*, int);//Вывод элемента из вектора
void vector_delete(vector*, int);//Удаление элемента из вектора
void vector_free(vector*);//Очистка вектора
#include <stdio.h>
//#include <time.h>
//#include <conio.h>
#include <stdlib.h>
//#include "vector.h"
#include <string.h>
void vector_create(vector *v) //Функция создания нового вектора.
{
v->data = 0;//Количество памяти выделенной вектору
v->size = 0;//Размер вектора
v->count = 0;//Количество данных в векторе
}
int vector_count(vector *v)//Функция получения информации о количестве данных
{
return v->count;
}
void vector_push_back(vector *v, void *e)//Функция добавления данных в векторе
{
if (v->size == 0) {//Проверка на размер, если размер равен нулю
v->size = 5; //Увеличиваем размер вектора хотя бы до еденицы
v
->data
= (void**)malloc(sizeof(void*) * v
->size
);//Добавление памяти в вектор memset(v
->data
, '\0', sizeof(void*) * v
->size
);//Заполнение памяти вектора }
if (v->size == v->count) {//Если размер вектора равен количеству данных
v->size *= 2;//Удваиваем размер вектора
v
->data
= (void**)realloc(v
->data
, sizeof(void*) * v
->size
);//Перераспределение блоков памяти вектора }
v->data[v->count] = e;
v->count++;
}
void vector_set(vector *v, int index, void *e)//Функция замены элемента блока
{
if (index >= v->count) {//Если номер элемента неверный, то выполнение прекращается
return;
}
v->data[index] = e;//Замена элемента новыми данными
}
void* vector_get(vector *v, int index)//Функция получения значения элемента вектора
{
if (index >= v->count) {//Если номер элемента неверный, то выполнение прекращается
return 0;
}
return v->data[index];//Значение конкретного элемента
}
void vector_delete(vector *v, int index)//Функция удаления конкретного элемента вектора
{
if (index >= v->count) {//Если номер элемента неверный, то выполнение прекращается
return;
}
v->data[index] = NULL;//Обнуление элемента
//остат
int i, j;
void **newarr
= (void**)malloc(sizeof(void*) * v
->count
* 2);//Цикл подсчета пустых элементов вектора и корректировка значения vector_count for (i = 0, j = 0; i < v->count; i++) {
if (v->data[i] != NULL) {
newarr[j] = v->data[i];
j++;
}
}
v->data = newarr;
v->count--;
}
void vector_free(vector *v)//Функция обнуления вектора
{
v->data=0;
}
int main(void)//Тестирование функций
{
int noe=0;
int k=0;
char m[10];
vector v;
vector_create(&v);//Создаем вектор
printf("Enter number of elements: "); //scanf("%i\n", &noe);
noe=6;
for(k=0; k<noe; k++){
vector_push_back(&v, m);
}
/*vector_push_back(&v, "1");//Добавляем данные в вектор
vector_push_back(&v, "2");
vector_push_back(&v, "3");
vector_push_back(&v, "4");
vector_push_back(&v, "5");*/
int i;
printf("Start vector contains %d elements:\n", vector_count
(&v
)); for (i = 0; i < vector_count(&v); i++) {//Вывод векторп
printf("%s\n", vector_get
(&v
, i
)); }
vector_set(&v, 2, "12");//Заменим 2 элемент вектора на число 12
vector_delete(&v, 1);//Удалим 1 элемент вектора
vector_delete(&v, 3);//И 3
printf("Edited vector contains %d elements:\n", vector_count
(&v
)); for (i = 0; i < vector_count(&v); i++) {//Вывод нового вектора
printf("%s\n", vector_get
(&v
, i
)); }
vector_free(&v);//Очистка вектора
return 0;
}
dHlwZWRlZiBzdHJ1Y3QgewogICAgdm9pZCoqIGRhdGE7CiAgICBpbnQgc2l6ZTsKICAgIGludCBjb3VudDsKfSB2ZWN0b3I7Cgp2b2lkIHZlY3Rvcl9jcmVhdGUodmVjdG9yKik7Ly/QodC+0LfQtNCw0L3QuNC1INCy0LXQutGC0L7RgNCwCmludCB2ZWN0b3JfY291bnQodmVjdG9yKik7Ly/QmNC90YTQvtGA0LzQsNGG0LjRjyDQviDQutC+0LvQuNGH0LXRgdGC0LLQtSDRjdC70LXQvNC10L3RgtC+0LIg0LIg0LLQtdC60YLQvtGA0LUKdm9pZCB2ZWN0b3JfcHVzaF9iYWNrKHZlY3RvciosIHZvaWQqKTsvL9CU0L7QsdCw0LLQu9C10L3QuNC1INGN0LvQtdC80LXQvdGC0LAg0LIg0LrQvtC90LXRhiDQstC10LrRgtC+0YDQsAp2b2lkIHZlY3Rvcl9zZXQodmVjdG9yKiwgaW50LCB2b2lkKik7Ly/Ql9Cw0LzQtdC90LAg0L7Qv9GA0LXQtNC10LvQtdC90L3QvtCz0L4g0Y3Qu9C10LzQtdC90YLQsCDQsiDQstC10LrRgtC+0YDQtSDQvdCwINC00YDRg9Cz0L7QtSDQt9C90LDRh9C10L3QuNC1CnZvaWQqIHZlY3Rvcl9nZXQodmVjdG9yKiwgaW50KTsvL9CS0YvQstC+0LQg0Y3Qu9C10LzQtdC90YLQsCDQuNC3INCy0LXQutGC0L7RgNCwCnZvaWQgdmVjdG9yX2RlbGV0ZSh2ZWN0b3IqLCBpbnQpOy8v0KPQtNCw0LvQtdC90LjQtSDRjdC70LXQvNC10L3RgtCwINC40Lcg0LLQtdC60YLQvtGA0LAKdm9pZCB2ZWN0b3JfZnJlZSh2ZWN0b3IqKTsvL9Ce0YfQuNGB0YLQutCwINCy0LXQutGC0L7RgNCwCgojaW5jbHVkZSA8c3RkaW8uaD4KLy8jaW5jbHVkZSA8dGltZS5oPgovLyNpbmNsdWRlIDxjb25pby5oPgojaW5jbHVkZSA8c3RkbGliLmg+Ci8vI2luY2x1ZGUgInZlY3Rvci5oIgojaW5jbHVkZSA8c3RyaW5nLmg+Cgp2b2lkIHZlY3Rvcl9jcmVhdGUodmVjdG9yICp2KSAvL9Ck0YPQvdC60YbQuNGPINGB0L7Qt9C00LDQvdC40Y8g0L3QvtCy0L7Qs9C+INCy0LXQutGC0L7RgNCwLgp7Cgl2LT5kYXRhID0gMDsvL9Ca0L7Qu9C40YfQtdGB0YLQstC+INC/0LDQvNGP0YLQuCDQstGL0LTQtdC70LXQvdC90L7QuSDQstC10LrRgtC+0YDRgwoJdi0+c2l6ZSA9IDA7Ly/QoNCw0LfQvNC10YAg0LLQtdC60YLQvtGA0LAKCXYtPmNvdW50ID0gMDsvL9Ca0L7Qu9C40YfQtdGB0YLQstC+INC00LDQvdC90YvRhSDQsiDQstC10LrRgtC+0YDQtQp9CgppbnQgdmVjdG9yX2NvdW50KHZlY3RvciAqdikvL9Ck0YPQvdC60YbQuNGPINC/0L7Qu9GD0YfQtdC90LjRjyDQuNC90YTQvtGA0LzQsNGG0LjQuCDQviDQutC+0LvQuNGH0LXRgdGC0LLQtSDQtNCw0L3QvdGL0YUKewoJcmV0dXJuIHYtPmNvdW50Owp9Cgp2b2lkIHZlY3Rvcl9wdXNoX2JhY2sodmVjdG9yICp2LCB2b2lkICplKS8v0KTRg9C90LrRhtC40Y8g0LTQvtCx0LDQstC70LXQvdC40Y8g0LTQsNC90L3Ri9GFINCyINCy0LXQutGC0L7RgNC1CnsKCWlmICh2LT5zaXplID09IDApIHsvL9Cf0YDQvtCy0LXRgNC60LAg0L3QsCDRgNCw0LfQvNC10YAsINC10YHQu9C4INGA0LDQt9C80LXRgCDRgNCw0LLQtdC9INC90YPQu9GOCgkJdi0+c2l6ZSA9IDU7IC8v0KPQstC10LvQuNGH0LjQstCw0LXQvCDRgNCw0LfQvNC10YAg0LLQtdC60YLQvtGA0LAg0YXQvtGC0Y8g0LHRiyDQtNC+INC10LTQtdC90LjRhtGLCgkJdi0+ZGF0YSA9ICh2b2lkKiopbWFsbG9jKHNpemVvZih2b2lkKikgKiB2LT5zaXplKTsvL9CU0L7QsdCw0LLQu9C10L3QuNC1INC/0LDQvNGP0YLQuCDQsiDQstC10LrRgtC+0YAKCQltZW1zZXQodi0+ZGF0YSwgJ1wwJywgc2l6ZW9mKHZvaWQqKSAqIHYtPnNpemUpOy8v0JfQsNC/0L7Qu9C90LXQvdC40LUg0L/QsNC80Y/RgtC4INCy0LXQutGC0L7RgNCwCgl9CgoJaWYgKHYtPnNpemUgPT0gdi0+Y291bnQpIHsvL9CV0YHQu9C4INGA0LDQt9C80LXRgCDQstC10LrRgtC+0YDQsCDRgNCw0LLQtdC9INC60L7Qu9C40YfQtdGB0YLQstGDINC00LDQvdC90YvRhQogICAgICAgIHYtPnNpemUgKj0gMjsvL9Cj0LTQstCw0LjQstCw0LXQvCDRgNCw0LfQvNC10YAg0LLQtdC60YLQvtGA0LAKCQl2LT5kYXRhID0gKHZvaWQqKilyZWFsbG9jKHYtPmRhdGEsIHNpemVvZih2b2lkKikgKiB2LT5zaXplKTsvL9Cf0LXRgNC10YDQsNGB0L/RgNC10LTQtdC70LXQvdC40LUg0LHQu9C+0LrQvtCyINC/0LDQvNGP0YLQuCDQstC10LrRgtC+0YDQsAoJfQoJdi0+ZGF0YVt2LT5jb3VudF0gPSBlOwoJdi0+Y291bnQrKzsKfQoKdm9pZCB2ZWN0b3Jfc2V0KHZlY3RvciAqdiwgaW50IGluZGV4LCB2b2lkICplKS8v0KTRg9C90LrRhtC40Y8g0LfQsNC80LXQvdGLINGN0LvQtdC80LXQvdGC0LAg0LHQu9C+0LrQsAp7CglpZiAoaW5kZXggPj0gdi0+Y291bnQpIHsvL9CV0YHQu9C4INC90L7QvNC10YAg0Y3Qu9C10LzQtdC90YLQsCDQvdC10LLQtdGA0L3Ri9C5LCDRgtC+INCy0YvQv9C+0LvQvdC10L3QuNC1INC/0YDQtdC60YDQsNGJ0LDQtdGC0YHRjwoJCXJldHVybjsKCX0KCgl2LT5kYXRhW2luZGV4XSA9IGU7Ly/Ql9Cw0LzQtdC90LAg0Y3Qu9C10LzQtdC90YLQsCDQvdC+0LLRi9C80Lgg0LTQsNC90L3Ri9C80LgKfQoKdm9pZCogdmVjdG9yX2dldCh2ZWN0b3IgKnYsIGludCBpbmRleCkvL9Ck0YPQvdC60YbQuNGPINC/0L7Qu9GD0YfQtdC90LjRjyDQt9C90LDRh9C10L3QuNGPINGN0LvQtdC80LXQvdGC0LAg0LLQtdC60YLQvtGA0LAKewoJaWYgKGluZGV4ID49IHYtPmNvdW50KSB7Ly/QldGB0LvQuCDQvdC+0LzQtdGAINGN0LvQtdC80LXQvdGC0LAg0L3QtdCy0LXRgNC90YvQuSwg0YLQviDQstGL0L/QvtC70L3QtdC90LjQtSDQv9GA0LXQutGA0LDRidCw0LXRgtGB0Y8KCQlyZXR1cm4gMDsKCX0KCglyZXR1cm4gdi0+ZGF0YVtpbmRleF07Ly/Ql9C90LDRh9C10L3QuNC1INC60L7QvdC60YDQtdGC0L3QvtCz0L4g0Y3Qu9C10LzQtdC90YLQsAp9Cgp2b2lkIHZlY3Rvcl9kZWxldGUodmVjdG9yICp2LCBpbnQgaW5kZXgpLy/QpNGD0L3QutGG0LjRjyDRg9C00LDQu9C10L3QuNGPINC60L7QvdC60YDQtdGC0L3QvtCz0L4g0Y3Qu9C10LzQtdC90YLQsCDQstC10LrRgtC+0YDQsAp7CglpZiAoaW5kZXggPj0gdi0+Y291bnQpIHsvL9CV0YHQu9C4INC90L7QvNC10YAg0Y3Qu9C10LzQtdC90YLQsCDQvdC10LLQtdGA0L3Ri9C5LCDRgtC+INCy0YvQv9C+0LvQvdC10L3QuNC1INC/0YDQtdC60YDQsNGJ0LDQtdGC0YHRjwoJCXJldHVybjsKCX0KCgl2LT5kYXRhW2luZGV4XSA9IE5VTEw7Ly/QntCx0L3Rg9C70LXQvdC40LUg0Y3Qu9C10LzQtdC90YLQsAovL9C+0YHRgtCw0YIKCWludCBpLCBqOwoJdm9pZCAqKm5ld2FyciA9ICh2b2lkKiopbWFsbG9jKHNpemVvZih2b2lkKikgKiB2LT5jb3VudCAqIDIpOy8v0KbQuNC60Lsg0L/QvtC00YHRh9C10YLQsCDQv9GD0YHRgtGL0YUg0Y3Qu9C10LzQtdC90YLQvtCyINCy0LXQutGC0L7RgNCwINC4INC60L7RgNGA0LXQutGC0LjRgNC+0LLQutCwINC30L3QsNGH0LXQvdC40Y8gdmVjdG9yX2NvdW50Cglmb3IgKGkgPSAwLCBqID0gMDsgaSA8IHYtPmNvdW50OyBpKyspIHsKCQlpZiAodi0+ZGF0YVtpXSAhPSBOVUxMKSB7CgkJCW5ld2FycltqXSA9IHYtPmRhdGFbaV07CgkJCWorKzsKCQl9Cgl9CgoJZnJlZSh2LT5kYXRhKTsKCXYtPmRhdGEgPSBuZXdhcnI7Cgl2LT5jb3VudC0tOwp9Cgp2b2lkIHZlY3Rvcl9mcmVlKHZlY3RvciAqdikvL9Ck0YPQvdC60YbQuNGPINC+0LHQvdGD0LvQtdC90LjRjyDQstC10LrRgtC+0YDQsAp7CglmcmVlKHYtPmRhdGEpOwoJdi0+ZGF0YT0wOwp9CgppbnQgbWFpbih2b2lkKS8v0KLQtdGB0YLQuNGA0L7QstCw0L3QuNC1INGE0YPQvdC60YbQuNC5CnsKICAgIGludCBub2U9MDsKICAgIGludCBrPTA7CiAgICBjaGFyIG1bMTBdOwoJdmVjdG9yIHY7Cgl2ZWN0b3JfY3JlYXRlKCZ2KTsvL9Ch0L7Qt9C00LDQtdC8INCy0LXQutGC0L7RgAoJcHJpbnRmKCJFbnRlciBudW1iZXIgb2YgZWxlbWVudHM6ICIpOwoJLy9zY2FuZigiJWlcbiIsICZub2UpOwoJbm9lPTY7Cglmb3Ioaz0wOyBrPG5vZTsgaysrKXsKICAgICAgICBzcHJpbnRmKG0sICIlZCIsIGspOwoJICAgIHByaW50ZigiJXNcbiIsIG0pOwogICAgICAgIHZlY3Rvcl9wdXNoX2JhY2soJnYsIG0pOwoJfQoJLyp2ZWN0b3JfcHVzaF9iYWNrKCZ2LCAiMSIpOy8v0JTQvtCx0LDQstC70Y/QtdC8INC00LDQvdC90YvQtSDQsiDQstC10LrRgtC+0YAKCXZlY3Rvcl9wdXNoX2JhY2soJnYsICIyIik7Cgl2ZWN0b3JfcHVzaF9iYWNrKCZ2LCAiMyIpOwoJdmVjdG9yX3B1c2hfYmFjaygmdiwgIjQiKTsKCXZlY3Rvcl9wdXNoX2JhY2soJnYsICI1Iik7Ki8KCglpbnQgaTsKCXByaW50ZigiU3RhcnQgdmVjdG9yIGNvbnRhaW5zICVkIGVsZW1lbnRzOlxuIiwgdmVjdG9yX2NvdW50KCZ2KSk7Cglmb3IgKGkgPSAwOyBpIDwgdmVjdG9yX2NvdW50KCZ2KTsgaSsrKSB7Ly/QktGL0LLQvtC0INCy0LXQutGC0L7RgNC/CgkJcHJpbnRmKCIlc1xuIiwgdmVjdG9yX2dldCgmdiwgaSkpOwoJfQogICAgdmVjdG9yX3NldCgmdiwgMiwgIjEyIik7Ly/Ql9Cw0LzQtdC90LjQvCAyINGN0LvQtdC80LXQvdGCINCy0LXQutGC0L7RgNCwINC90LAg0YfQuNGB0LvQviAxMgoJdmVjdG9yX2RlbGV0ZSgmdiwgMSk7Ly/Qo9C00LDQu9C40LwgMSDRjdC70LXQvNC10L3RgiDQstC10LrRgtC+0YDQsAoJdmVjdG9yX2RlbGV0ZSgmdiwgMyk7Ly/QmCAzCglwcmludGYoIkVkaXRlZCB2ZWN0b3IgY29udGFpbnMgJWQgZWxlbWVudHM6XG4iLCB2ZWN0b3JfY291bnQoJnYpKTsKCWZvciAoaSA9IDA7IGkgPCB2ZWN0b3JfY291bnQoJnYpOyBpKyspIHsvL9CS0YvQstC+0LQg0L3QvtCy0L7Qs9C+INCy0LXQutGC0L7RgNCwCgkJcHJpbnRmKCIlc1xuIiwgdmVjdG9yX2dldCgmdiwgaSkpOwoJfQoKCXZlY3Rvcl9mcmVlKCZ2KTsvL9Ce0YfQuNGB0YLQutCwINCy0LXQutGC0L7RgNCwCgoJcmV0dXJuIDA7Cn0=