Функции.Динамические массивы

1.Создать функцию, позволяющую добавлять блок элементов в конец массива.

2.Создать функцию, позволяющую вставлять блок элементов, начиная с произвольного индекса массива.

3.Создать функцию, позволяющую удалять блок элементов, начиная с произвольного индекса массива.

int* AddElementForDynamicArray(int*& arr, int& size, int num) {
    int* CopyArr = new int[size + 1];
    for (int i = 0; i < size; i++) {
        *(CopyArr + i) = *(arr + i);
    }
    CopyArr[size] = num;
    delete[] arr;
    arr = CopyArr;

    size++;
    return CopyArr;
}
int* AddElementByIndexForDynamicArray(int* arr, int& size, int num, int index) {
    int* newArray = new int[++size];
    for (int i = 0; i < index; ++i)
        newArray[i] = arr[i];
    newArray[index] = num;
    for (int i = index; i < size - 1; ++i)
        newArray[i + 1] = arr[i];
    delete[]arr;
    arr = newArray;
    return newArray;
}
int* DeletElement(int* arr, int& size, int deletes) {
    if (deletes > size || deletes < 1) {
        cout << "Error" << endl;
        return 0;
    }
    else {
        for (int i = deletes - 1; i < size - 1; i++) {
            arr[i] = arr[i + 1];
        }
        size--;
        return arr;
    }
}

Значит с этим кодом я в похожих заданиях где я должен был удалить,добавлять в конец или же добавить один элемент по индексу.А в этом задании надо уже провернуть это с целым блоком, как мне это реализовать?


Ответы (1 шт):

Автор решения: user520138
#include <iostream>

template <typename T>
void delete_Array(T* arr)
{
    delete[] arr;
}

template <typename T>
void show_Array(const T* arrB, const T* const arrE)
{
    while (arrB != arrE)
    {
        std::cout << *arrB++ << ' ';
    }
    std::cout << std::endl;
}

template <typename T>
void push_back(T*& arr, int& size, T* block, int size_block)
{
    size += size_block;
    T* new_arr{ new T[size]{} };

    int j{ 0 };
    for (int i{ 0 }; i < size; ++i)
    {
        if (i < size - size_block)
        {
            new_arr[i] = arr[i];
        }
        else
        {
            new_arr[i] = block[j++];
        }
    }

    delete[] arr;
    arr = new_arr;
}

int main()
{
    int size{ 5 };
    auto arr{ new int[size] {1,2,3,4,5} };

    std::cout << "Array:\n";
    show_Array(arr, arr + size);

    int size_block{ 5 };
    auto block{ new int[size_block] {11,12,13,14,15} };

    push_back(arr, size, block, size_block);
    std::cout << "An array with a new block of elements:\n";
    show_Array(arr, arr + size);

    delete_Array(arr);
    delete_Array(block);

    return 0;
}

Вот так можно сделать.
→ Ссылка