Написать класс, используя двумерный динамический массив - PullRequest
3 голосов
/ 07 октября 2009

У меня есть домашнее задание. Я не ищу, чтобы кто-то делал работу за меня, у меня просто проблемы с одним небольшим аспектом, хотя я бы также принял совет и по другим вопросам.

Назначение:

Написать класс, используя двумерный динамический массив.

Конструктор передает размеры массива. Конструктор также инициализирует все значения в динамическом массиве до индекса строки, умноженного на индекс столбца.

  1. Поменяйте местами два столбца двумерного массива, где индексы столбцов передаются в качестве параметров. Делайте это, просто копируя адреса, а не значения столбцов elemnets.
  2. Удалить столбец двумерного массива, в котором в качестве параметра передается индекс столбца. Не используйте оператор delete для массива столбцов и установите для элемента горизонтального массива значение NULL. Уменьшите размер горизонтального массива на 1.
  3. Создайте функцию печати для класса, чтобы распечатать значения двумерного массива и убедиться, что ваши функции работают правильно. После того, как вы узнаете, что они работают правильно, удалите функцию печати.

Мне нужна помощь в понимании того, как объявлять 2D-массив в приватном разделе. И, как уже упоминалось, если бы кто-нибудь мог дать мне другие советы о том, как это сделать, это было бы оценено.

Ответы [ 3 ]

7 голосов
/ 07 октября 2009

Прошло некоторое время с тех пор, как я занимался разработкой на C ++, но если я правильно помню, вы бы сделали что-то вроде следующего:

int rows = 5;
int cols = 10;

int** array = new int*[rows];
for (int i = 0; i < rows; i++) {
     array[i] = new int[cols];
}

Я могу ошибаться; В Интернете я вижу сообщения об обратном, где вам приходится подделывать двумерные массивы с помощью одномерного массива и менять подписку:

http://en.allexperts.com/q/C-1040/creating-2D-array-dynamically.htm

1 голос
/ 07 октября 2009

Это должно дать вам представление. Я не пытался скомпилировать этот код:

class Array {
   int **arr;
};

Array::Array(int rows, int cols) {
    arr = new int * [rows];  // this will allocate 'rows' many 'int *'s
    if (arr) {               // to ensure memory was allocated
        for (int i = 0; i < rows; i++) {
            arr[i] = new int [cols];  // this will allocate 'cols' many 'int's
            assert(arr[i]);           // to ensure memory was allocated
        }
    }
}

arr - указатель на массив указателей int. arr[i] - указатель на массив целых чисел, т. Е. Каждый arr[i] представляет одну строку в вашем двумерном массиве. Это должно начать вас.

Если вы действительно хотите изучать C ++, попробуйте сами и научитесь пользоваться отладчиком. Если вы еще не знакомы с отладчиком, используйте printfs, чтобы узнать, что происходит не так.

0 голосов
/ 08 октября 2009
class TwoDimensionalArray {
  private:
    int **array;

  public:
    TwoDimensionalArray(const int, const int);
};

TwoDimensionalArray::TwoDimensionalArray(const int rows, const int columns) {
    array = new int *[rows];
    for (int i = 0; i < rows; i++)
        array[i] = new int[columns];
}

int main() {
    TwoDimensionalArray *arr1 = new TwoDimensionalArray(5, 10);
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...