Какие изменения мне нужно сделать для заголовочного файла и файла cpp 1d-массива, чтобы он также работал для 2d-массива?

Noob на c ++, пожалуйста, не беспокойтесь по поводу объяснений: здесь я создал заголовочный файл и файл cpp, в котором есть несколько методов, позволяющих изменить размер массива / удалить содержимое и т. Д. Для 1d массива. Цель состоит в том, чтобы внести несколько изменений, чтобы это также работало для 2d массивов. Какие изменения мне нужно сделать здесь? Пользователь будет указывать количество строк и столбцов, а также содержимое массива из основной функции, что я могу сделать. так-

Заголовочный файл:

#ifndef DYNARR_H_INCLUDED
#define DYNARR_H_INCLUDED

class dynArr {
    private:
    int *data;
    int size;

    public:
    dynArr();
    dynArr(int);
    ~dynArr();
    void setValue(int, int);
    int getValue(int);
    void allocate(int); 
};

#endif // DYNARR_H_INCLUDED

Файл CPP

#include "dynarr.h"
#include <iostream>
using namespace std;
dynArr::dynArr()
{
    data = NULL;
    size = 0;
}
dynArr::dynArr(int s)
{
    data =  new int[s];
    size = s;
}
dynArr::~dynArr()
{
    delete [] data;
}
int dynArr::getValue(int index)
{
    return data[index];
}
void dynArr::setValue(int index, int value)
{
    data[index] = value;
}


void dynArr::allocate(int s)        //allows to change array size
{
    delete [] data;
    data = new int[s];
    size = s;
}

Всего 1 ответ


Я предлагаю вам попробовать выделить динамический 2D-массив (в одном приложении) самостоятельно, прежде чем смотреть на остальную часть моего ответа.

Подсказка: используйте указатель на указатель для хранения массива.

Я предполагаю, что вы хотите создать новый класс (пусть это будет dynArr_2d), тогда вам, вероятно, потребуется внести следующие изменения:

• Сделать «данные» указателем на указатель на int.

• Замените элемент данных «размер» двумя элементами данных типа int (например, строки и столбцы) для хранения измерений двумерного массива.

• Реализация конструктора с двумя аргументами (который заменяет конструктор с одним аргументом) должна быть такой:

dynArr_2d::dynArr_2d(int r, int c) {
    rows = r;
    cols  = c;
    data = new int*[r];  //pointer to array of pointers

    for (int i = 0; i < r; i++) {
        data[i] = new int[c]; //each pointer in the array points to an array
    }
} //end constructor

Объяснение для конструктора: -

Вы знаете, что указатель на определенный тип может быть указателем на массив этого типа, и вы также знаете, что 2D-массив является массивом массивов.

Имея это в виду, теперь мы можем рассматривать «данные» как указатель на (pointer-to-int), то есть может быть указателем на массив (указателей на int), и каждый указатель в этом массиве может, в свою очередь, указать массив массивов.

• Теперь, когда у вас выделен 2D-массив, остальные изменения будут довольно простыми.


Есть идеи?

10000