Dynamic Arrays in C++

Dynamic arrays plays a crucial role in modern programming, providing flexibility and effiecieny when dealing with data structures in C++. Unlike static arrays, dynamic arrays allow you to allocate and deallocate memory at runtime, making them a powerful tool for handling variable-sized datasets.

What is Dynamic Array?

A dynamic array in C++ is an array-like structure whose size can be changed during runtime. It is created using pointers and memory allocation functions, such as new and delete or malloc and free. Unlike static arrays, which have a fixed size determined at compile time, dynamic arrays offer the flexibility to resize based on the program's requirement.

Creating a Dynamic Array

To create a dynamic array in C++, you use pointers and allocate memory on the heap. Here's a simple example:

#include <iostream>

int main() {
    // Declare a pointer to an integer
    int *dynamicArray;

    // Dynamically allocate memory for an array of size 5
    dynamicArray = new int[5];

    // Access and manipulate elements
    dynamicArray[0] = 1;
    dynamicArray[1] = 2;
    // ...

    // Deallocate memory to prevent memory leaks
    delete[] dynamicArray;

    return 0;
}

In this example, new int[5] allocates memory for an integer array of size 5 on the heap. The delete[] statement is crucial to free up the allocated memory when it is no longer needed.

Resizing a Dynamic Array

One of the key advantages of dynamic arrays is their ability to resize. However, resizing involves creating a new array, copying the elements from the old array to the new one, and deallocating the old array. Here's a basic example:

#include <iostream>

int main() {
    // Declare a pointer to an integer
    int *dynamicArray;

    // Dynamically allocate memory for an array of size 5
    dynamicArray = new int[5];

    // Resize the array to 10 elements
    int *newDynamicArray = new int[10];

    // Copy elements from the old array to the new one
    for (int i = 0; i < 5; ++i) {
        newDynamicArray[i] = dynamicArray[i];
    }

    // Deallocate the old array
    delete[] dynamicArray;

    // Update the pointer to point to the new array
    dynamicArray = newDynamicArray;

    // Access and manipulate elements in the resized array
    dynamicArray[5] = 6;
    // ...

    // Deallocate memory when done
    delete[] dynamicArray;

    return 0;
}

It's important to note that manually resizing arrays can be error-prone and cumbersome. C++ provides a more convenient alternative: std::vector container, which is essentially a dynamic array with built-in resizing capabilities, we will discuss about it in next chapter.