Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Массив неивестной длины C++
.:LAVteam:. > Компьютерный форум > Программирование
Vladi
Вобщем стоит задача:
Пользователь вводит ряд чисел, причём не известно вообще какой длины ряд, потом пользователь вводит определённый символ, обозначающий конец ряда и далее идёт математика, так вот не могу сообразить как реализовать этот массив неизвестного размера. Помогите пожалусто, заранее спасибо.
SAA_66
Сделай проверку: если введено число - наращиваешь размер массива на единицу, если символ окончания ввода - переход дальше. Да и вообще решений можно придумать немеряно, задачка простая.
Vladi
А можно пример кода как реализовать удлинение массива на единицу?Вот именно в этом у меня загвоздка, не знаю как удлинить массив. : (
Fallcom
Допустим, пользователь вводит числа, разделяя их пробелами. Пробегаешь по строке и считаешь пробелы - вот тебе количество чисел, например, N.

Далее делаешь так:

Код
int *Mas;
Mas = (int *)malloc(N);

Здесь создается динамический массив на N элементов. Если нужно изменить его размер на другое число, используешь функцию realloc.

Когда закончишь работу с массивом, не забудь сделать
Код
free(Mas);
[src]
ну вот например класс для типа int (чтоб сделать уникалиный, пользуйся шаблонами):

Код
class DynArray
{
public:
      DynArray(int alloc = 8)
      {
             data = (int*)malloc(sizeof(int) * alloc);
             size = 8;
             num = 0;
      }

      ~DynArray() { clear(); }

      void clear()
      {
             if (data)
             {
                  delete data;
                  data = NULL;
             }                

             size = num = 0;
      }

       int operator[](int id) { return data[id]; }

      void push(int v, int alloc = 8)
      {
           if (num >= size)
           {
                 int *newdata = (int*)malloc(sizeof(int) * (size + alloc));
                 memcpy(newdata, data, sizeof(int) * num);
                 data = newdata;
           }
           else
               data[num] = v;
      }

      int size, num, *data;
};


пользоваться так:

DynArray a;
a.push(2);
a.push(4);
a.push(7 + 8);

printf("%d", a[2]);
Vladi
Fallcom
Спасибо, получилось. biggrin2.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.