C: как инициализировать вектор - PullRequest
0 голосов
/ 07 декабря 2018

Я хотел бы инициализировать вектор типа

struct vector
{
   size_t capacity;
   size_t size;
   int *data;
};

Я сделал это, но я не уверен:

struct vector *vector_new();
{
   struct vector *vect;
   vect = malloc (1*sizeof(vect));
   vect->capacity = 1;
   vect->size = 0;

   int *data;
   data = malloc (1*sizeof(int));
}

Я думаю, мне нужно выделить 2 пространства памяти,один, который содержит «структурный вектор» и один для данных.Должен ли я использовать malloc () или calloc ()?Более того, как я могу выдать ошибку, если недостаточно памяти?Спасибо

1 Ответ

0 голосов
/ 07 декабря 2018

Ваш код должен выглядеть примерно так:

#define INITIAL_CAPACITY 10    // initial capacity, choose some appropriate value
                               // between 1 and N

struct vector *vector_new();
{
   struct vector *vect = malloc (sizeof(struct vector));
   vect->capacity = INITIAL_CAPACITY;
   vect->size = 0;
   vect->data = malloc(sizeof(int) * INITIAL_CAPACITY);
   return vect;
}

Это была простая часть, теперь вам нужно написать функции, которые позволяют поместить некоторые данные в вектор, тогда вы, вероятно, захотитеиспользуйте функцию realloc, когда размер становится больше емкости.

Для краткости в этом коде не выполняется проверка ошибок.

Для обработки ошибок вы можете вернуть NULL из vector_new функция.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...