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

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

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

#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 Ответ

0 голосов
/ 10 февраля 2020

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

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

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

• Создать 'data' указатель на указатель на int.

• Замените элемент данных size размером «size» с двумя элементами данных типа 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-массив является массивом массивов.

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

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

...