Тема: Динамічні(безрозмірні) масиви c++

Привіт.
Маю таке питання, як можна на с++ реалізувати динамічний масив
тобто масив, розмір якого наперед не відомий і може збільшувати або зменшуватися.
Про динамічну пам’ять я знаю, та не знаю чи можливо її у цій задачі заюзати
чи треба особливий підхід.
Задача така:

Користувач вводить число(float), як це число,
то це число заноситься у масив. Так продовжується доти, доки не буде
нажатий ентер.

Проблема тільки у тому, що треба число зразу заносити у масив,
але масив створити не можу бо треба вказати к-сть елементів, а
к-сть елементів може бути 2 а може бути і 100.

2

Re: Динамічні(безрозмірні) масиви c++

Найпростіше - використати шаблонний клас vector, щоб туди додавати елементи, використовуючи push_back() метод.
Якщо ж поставлена задача терпугом створити танк, то можна і malloc(), realloc() або тим же банальним new із подальшим копіюванням масиву.

Створення масиву можливе скільки завгодно разів:

float *arr = new float[sizePrev+1];

Головне - своєчасно і сумлінно прибирати за собою, інакше комп захлинеться у неперетравлених блоках пам'яті. :)

3 Востаннє редагувалося Пам'ять не може бути READ (18.02.2013 21:30:29)

Re: Динамічні(безрозмірні) масиви c++

Bartash написав:

Створення масиву можливе скільки завгодно разів:

float *arr = new float[sizePrev+1];

Головне - своєчасно і сумлінно прибирати за собою, інакше комп захлинеться у неперетравлених блоках пам'яті. :)

Дякую. А ще таке питання.
Наприклад я зчиту у NumbersArray[0] число(float), коли просто натиснути ентер, то воно ще раз чекає введення
і так доти, доки не буде щось введено. Як можна зробити, щоб при натисканні ентеру, воно просто записувало у NumbersArray[0] пусту строку ?

4

Re: Динамічні(безрозмірні) масиви c++

Чесно кажучи, не зрозумів ідеї до кінця. NumbersArray - масив чисел, а туди - текст встромляти?..

Може, код покажете?

З.І: "зразу заносити" - себто ніяких проміжних змінних?

Re: Динамічні(безрозмірні) масиви c++

Bartash написав:

З.І: "зразу заносити" - себто ніяких проміжних змінних?

Виходить, що так.

6

Re: Динамічні(безрозмірні) масиви c++

Може, файлик завдання скинете про всяк випадок для уточнення? :)

Бо думки від scanf() різко плигнули до спадку від вектора з перевантаженням операторів...

7 Востаннє редагувалося Пам'ять не може бути READ (19.02.2013 18:08:06)

Re: Динамічні(безрозмірні) масиви c++

Ось накидав код, з використанням вектора.
Вибачте, що якщо бидлокод, але як зміг так і написав.

#include<iostream>
#include<vector>

using namespace std;
vector<float> NumbersArray;

void getNumbers(void)
{
    int numNumbers = 1;
    float tmp;

    while(true)
    {
     cout << "Введіть " << numNumbers << " число \n";
     cin >> tmp;

     if(tmp == 0.00)
     {
         cout << "Ввід завершено. \n";
         break;
     }
     else
     {
      NumbersArray.push_back(tmp);
      numNumbers++;
     }
    }

}

void MathS(void)
{
  float average;

  for(int i = 0; i < NumbersArray.size(); i++)
    average += NumbersArray[i];

  cout << "Середне арифметичне " << NumbersArray.size() << " елементів = " << average / NumbersArray.size();
}

int main(void)
{

    getNumbers();
    MathS();

    NumbersArray.clear();
 return 0;
}

P.S: трохи неправильно був сформував умові задачі...

8

Re: Динамічні(безрозмірні) масиви c++

Hanter написав:

Ось накидав код, з використанням вектора.
Вибачте, що якщо бидлокод, але як зміг так і написав.

Та код абсолютно нормальний. Єдине - зміст змінної numNumbers лишився для мене таємницею, оскільки вона ніде, крім циклу, не фігурує. :)

З.І: у вас навіть функції окремі створені для різних задач, що є плюсом у карму в області проектування. ;)

Re: Динамічні(безрозмірні) масиви c++

Bartash написав:

Та код абсолютно нормальний. Єдине - зміст змінної numNumbers лишився для мене таємницею, оскільки вона ніде, крім циклу, не фігурує. :)
З.І: у вас навіть функції окремі створені для різних задач, що є плюсом у карму в області проектування. ;)

Її використовую для виведення повідомлення типу : "Введіть n-не число" де n-не число - це змінна numNumbers, тобто
щоб користувачу показувалося "Введіть 1 числоб Введіть 2 число" і тд.

10

Re: Динамічні(безрозмірні) масиви c++

Hanter написав:

Її використовую для виведення повідомлення типу : "Введіть n-не число" де n-не число - це змінна numNumbers, тобто
щоб користувачу показувалося "Введіть 1 числоб Введіть 2 число" і тд.

Прийнято. То я півсонним провтикав очевидне. :3

З.І: як альтернативу можна було ще так:

cout<<"Input "<<NumbersArray.size()+1<<" number: ";

Re: Динамічні(безрозмірні) масиви c++

Bartash написав:

Прийнято. То я півсонним провтикав очевидне. :3
З.І: як альтернативу можна було ще так:

cout<<"Input "<<NumbersArray.size()+1<<" number: ";

Дійсно, так краще.