IPB

Здравствуйте, гость ( Вход | Регистрация )

 Правила форума Всем прочитать перед созданием темы!
 
Тема закрытаНачать новую тему
Массив неивестной длины C++
Vladi
сообщение 30.09.2007 - 13:16
Сообщение #1


Прохожий
Иконка группы

Группа: Пользователи
Пользователь №: 22862
Сообщений: 27
Регистрация: 5.11.2005
Загружено: байт
Скачано: байт
Коэффициент: ---
Спасибо сказали: 0 раз(а)



Вобщем стоит задача:
Пользователь вводит ряд чисел, причём не известно вообще какой длины ряд, потом пользователь вводит определённый символ, обозначающий конец ряда и далее идёт математика, так вот не могу сообразить как реализовать этот массив неизвестного размера. Помогите пожалусто, заранее спасибо.
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
SAA_66
сообщение 1.10.2007 - 05:20
Сообщение #2


Завсегдатай
Иконка группы

Группа: Пользователи
Пользователь №: 32334
Сообщений: 114
Регистрация: 17.04.2006
Из: Якутия
Загружено: байт
Скачано: байт
Коэффициент: ---
Спасибо сказали: 18 раз(а)



Сделай проверку: если введено число - наращиваешь размер массива на единицу, если символ окончания ввода - переход дальше. Да и вообще решений можно придумать немеряно, задачка простая.
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
Vladi
сообщение 1.10.2007 - 16:43
Сообщение #3


Прохожий
Иконка группы

Группа: Пользователи
Пользователь №: 22862
Сообщений: 27
Регистрация: 5.11.2005
Загружено: байт
Скачано: байт
Коэффициент: ---
Спасибо сказали: 0 раз(а)



А можно пример кода как реализовать удлинение массива на единицу?Вот именно в этом у меня загвоздка, не знаю как удлинить массив. : (

Сообщение отредактировал Vladi - 1.10.2007 - 16:44
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
Fallcom
сообщение 1.10.2007 - 18:36
Сообщение #4


The Last Gunslinger
Иконка группы

Группа: Пользователи
Пользователь №: 6829
Сообщений: 1007
Регистрация: 26.04.2004
Из: Беларусь, Гомель
Загружено: байт
Скачано: байт
Коэффициент: ---
Спасибо сказали: 9 раз(а)



Допустим, пользователь вводит числа, разделяя их пробелами. Пробегаешь по строке и считаешь пробелы - вот тебе количество чисел, например, N.

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

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

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

Когда закончишь работу с массивом, не забудь сделать
Код
free(Mas);
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
[src]
сообщение 7.10.2007 - 17:52
Сообщение #5


Прохожий
Иконка группы

Группа: Пользователи
Пользователь №: 23425
Сообщений: 49
Регистрация: 11.11.2005
Загружено: байт
Скачано: байт
Коэффициент: ---
Спасибо сказали: 0 раз(а)



ну вот например класс для типа 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
сообщение 8.10.2007 - 15:24
Сообщение #6


Прохожий
Иконка группы

Группа: Пользователи
Пользователь №: 22862
Сообщений: 27
Регистрация: 5.11.2005
Загружено: байт
Скачано: байт
Коэффициент: ---
Спасибо сказали: 0 раз(а)



Fallcom
Спасибо, получилось. biggrin2.gif
Перейти в начало страницы
Вставить ник
+Цитировать сообщение

Тема закрытаНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 20.09.2019 - 03:03