Динамічні масиви

У мові програмування вказівники відіграють величезну роль. Вони наділяють програмістів великими можливостями але при цьому й великими труднощами. За допомогою вказівників робиться чи мало речей.

Наприклад, ви можете створювати псевдодинамічні масиви. Це масиви розмір яких ви можете не вказувати відразу в коді програми, а вже під час її виконання. Але при цьому вам не вдасться змінити його розмір в майбутньому (як мінімум не вдасться збільшити). Розмір таких масивів має бути заданий до їх використання. По факту ви його (розмір) задаєте при створені масиву, но самостійно.

Розберемося як створити одновимірний псевдодинамічний масив.

В першу чергу нам потрібно вказати тип масиву; далі поставити символ та записати ім’я масиву; ставимо символ записуємо ключове слово та повторно вказуємо тип масиву і у квадратних дужках вказуємо розмір масиву.


        Тип_масиву *ім’я_масиву = new тип_масиву[розмір_масиву];
        

В якості розміру масиву ви можете записувати як ціле число так і змінну типу ціле число.

Дані масиви можна використовувати як звичайні. Тобто, потрібно вказати ім’я масиву та у квадратних дужках номер елемента до якого хочемо звернутися Пам’ятаємо, що елемент масиву є на одиницю меншим за вказаний номер. Тобто, перший елемент буде під нульовим номером

Якщо ви чітко знаєте, що використовувати свій масив більше не будете, то вам варто звільнити виділену на нього пам’ять. Для цього потрібно написати: ключове слово квадратні дужки та ім’я масиву.


        delete []ім’я_масиву;
        

Наприклад:

    
            #include <iostream>
            int main()
            {
                //зміна яка буде довжиною/розміром масиву
                int length;
                std::cout << "input length mas: ";
                std::cin >> length;

                //створюємо псевдодинамічний масив
                //тип масиву є "float"
                //з ім'ям масиву "mas"
                //та довжиною/розміром масиву "length"
                float *mas = new float[length];

                //заповнюємо масив елементами
                for(int i = 0; i < length; i++)
                {
                    std::cout << "input element mas: ";
                    std::cin >> mas[i];
                }

                //виводимо елементи масиву
                for(int i = 0; i < length; i++)
                {
                    std::cout << mas[i] << " ";
                }

                //звільняємо пам’ять виділену на масив
                delete []mas;

                return 0;
            }
        
    

Створення багатовимірних псевдодинамічних масивів потребує використання циклів.

Враховуючи, що двовимірний масив це по факту є масив масивів. Тобто, це є одновимірний масив елементами якого є масиви.

То, для того щоб створити двовимірний псевдодинамічний масив ми маємо створити одновимірний масив з елементами псевдодинамічними одновимірними масивами.

Враховуючи, що при створені псевдодинамічних масивів використовується вказівник, то в даній ситуації у нас буде вказівник на вказівник. Тому, потрібно буде ставити два символи

    
            #include <iostream>
            int main()
            {
                //зміні які будуть довжиною/розміром масиву
                //row - кількість рядків
                //col - кількість стовпців
                int row, col;
                std::cout << "input row mas: ";
                std::cin >> row;
                std::cout << "input col mas: ";
                std::cin >> col;

                //створюємо псевдодинамічний масив
                //тип масиву є "int"
                //з ім'ям масиву "mas"
                //та довжиною/розміром масиву "[row][col]"
                //як помітно ми використовуємо подвійний вказівник
                //при цьому перед розміром ставимо теж символ "*"
                //враховуючи, що кількість стовпців вказуємо пізніше,
                //то при створенні записуємо лише кількість рядків
                int **mas = new int *[row];
                for(int i = 0; i < row; i++)
                {
                    //для кожного рядка ми вказуємо
                    //розмір/кількість стовпців
                    mas[i] = new int[col];
                }

                //заповнюємо масив елементами
                for(int i = 0; i < row; i++)
                {
                    for(int j = 0; j < col; j++)
                    {
                        std::cout << "input element mas: ";
                        std::cin >> mas[i][j];
                    }
                }

                //виводимо елементи масиву
                for(int i = 0; i < row; i++)
                {
                    for(int j = 0; j < col; j++)
                    {
                        std::cout << mas[i][j] << " ";
                    }
                    std::cout << std::endl;
                }

                //звільняємо пам’ять виділену на масив
                delete []mas;

                return 0;
            }