Как получить копию двумерного массива в новый массив на новую область памяти

97
09 февраля 2022, 15:00

Возникла необходимость получить копию первого столбца в двумерном массиве. Я все делаю через указатели, и одномерный и двумерный. Как можно получить значения из двумерного без указания на память. Вот например есть функция:

    #include <iostream>
#include<iomanip>
using namespace std;
int** createMatrix(int m, int n);
int** fillMatrix(int** arr, int m, int n);
int* fillm(int m);
void showMatrix(int** arr, int m, int n);
void seekToUpdate(int** arr, int* ad, int m, int n);
bool checkValidMatrix(int **arr,int *ad,int m,int n);
int* copyMatrix(int* sourseMatrix, int rowsCount);
void showArr(int* arr, int m)
{
    for (int i = 0; i < m; i++)
        cout << arr[i] << ends;
}
int main()
{
    setlocale(LC_ALL, "Russian");
    srand(time(0));
    int m, n;//строки и столбцы основной матрицы
    cout << "Input count columns: ";
    cin >> m;
    cout << "Input count rows: ";
    cin >> n;
    auto arr = createMatrix(m, n);//авто определение типов
    arr = fillMatrix(arr, m, n);
    showMatrix(arr, m, n);
    auto arr_trix = copyMatrix(*arr, m);
    showArr((*arr), m);
    seekToUpdate(arr, arr_trix, m, n);
}
int* copyMatrix(int* sourseMatrix, int rowsCount)
{
    int incr = 0;
    int* i = &incr;
    int* destMatrix = new int [rowsCount];
    //memcpy(destMatrix, sourseMatrix, sizeof(int) * rowsCount);
    for (; (*i) < rowsCount; i++)
        destMatrix[(*i)] = (*sourseMatrix)[i];
    return destMatrix;
}
int** createMatrix(int m, int n)
{
    int** arr = new int* [m];
    for (int i = 0; i < m; i++)
    {
        arr[i] = new int[n];
    }
    return arr;
}
int** fillMatrix(int** arr, int m, int n)
{
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
        {
            arr[i][j] = 0 + rand() % 15;
        }
    }
    return arr;
}
int* fillm(int m)
{
    int* a = new int[m];
    for (int i = 0; i < m; i++)
    {
        a[i] = 0 + rand() % 15;
    }
    return a;
}
void showMatrix(int** arr, int m, int n)
{
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
        {
            cout << setw(3) << arr[i][j] << ends;
        }
        cout << endl;
    }
    cout << endl;
    //for (int i = 0; i < m; i++)
    //{
    //  for (int j = 0; j < n; j++)
    //  {
    //      cout << setw(3) << arr[j][i] << ends;
    //  }
    //  cout << endl;
    //}
}
bool checkValidMatrix(int** arr_first, int* arr_second, int m, int n)
{
    bool isValid = false;
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
        {
            if (arr_first[j][i] == arr_second[j])
            {
                isValid = true;
            }
            else
            {
                isValid = false;
                break;
            }
        }
        cout << endl;
        if (isValid == false)
            break;
        if (isValid == true)
        {
            cout << endl;
        }
    }
    return isValid;
}
void seekToUpdate(int **arr,int *ad,int m,int n)
{
    cout << endl;
    int counter = 0;
    while (checkValidMatrix(arr, ad, m, n) != true)
    {
        if(counter>0)
        arr = fillMatrix(arr, m, n);
        cout << "Попытка генерации номер:" << ends << counter++ << endl;
        cout << endl;
        showMatrix(arr, m, n);
        cout << endl;
        showArr((*arr), m);
    }
    cout << "Матрица сгенерирована с попытки номер:" << ends << counter<<endl;
    showMatrix(arr, m, n);
}

В данном коде функция int* copyMatrix(int* sourseMatrix, int rowsCount); должна копировать массив. Но т.к. она указывает на область памяти двумерного массива, она будет меняться вместе с ним. В конце есть функция seekToUpdate(), она пытается создать матрицу которая удовлетворяет условию, что у нее все столбцы имеют значения в определенном порядке. И пока не получится такая матрица, цикл бесконечно перезаполняет матрицу. И тут опять же вместе с изменением двумерного массива, меняется и одномерный массив Пробовал как вариант, через цикл просто присваивать каждому элементу одного массива, каждый элемент другого массива. Но результат один и тот же.

READ ALSO
Процентная ставка по вкладу составляет P процентов годовых. Определите размер вклада через год

Процентная ставка по вкладу составляет P процентов годовых. Определите размер вклада через год

Задача: Процентная ставка по вкладу составляет P процентов годовых, которые прибавляются к сумме вклада в конце годаВклад составляет X рублей...

96
Нужна помощь со вложенным запросом Mysql

Нужна помощь со вложенным запросом Mysql

структура и данные таблицы тут https://pastebincom/u1GY7gvr

154
Извлечь нужные столбцы

Извлечь нужные столбцы

У меня есть запрос:

94
Структура базы данных для авто

Структура базы данных для авто

Допустим на сайте будут автомобили, некоторые из которых будут электромобилиТ

80