0 / 0 / 0
Регистрация: 08.10.2015
Сообщений: 6
1

Оценка кода динамического двумерного массива

06.11.2018, 20:41. Показов 1255. Ответов 2

Доброго времени суток. Прошу оценить правильность выделения и удаления памяти, а также заполнения массива. Два примера.
Вот первый. В нем функция new вызывалась в цикле несколько раз(насколько я зная она очень медленна)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
// dynamic_2dArray.cpp
 
#include "stdafx.h"
#include <iostream>
 
using namespace::std;
 
void array_fill(int **array, int height, int width);
void array_print(int **array, int height, int widht);
 
 
int main()
{
    int height;
    int width;
    cin >> height >> width;
 
    int** arr = new int*[height];       // выделение памяти под массив указателей
 
    for (int i = 0; i != height; i++) { // выделение памяти под значения массива       
        *(arr+i) = new int[width];
    }
 
    array_fill(arr, height, width);
    array_print(arr, height, width);
 
 
    for (int i = 0; i != height; i++) { 
        delete[] arr[i];
    }
    delete[] arr;                       
 
    return 0;
}
 
void array_fill(int **array, int height, int widht) {
    for (int i = 0; i != height; i++) {
        for (int j = 0; j != widht; j++) {
            *(*(array + i) + j) = i * j;
        }
    }
}
void array_print(int **array, int height, int widht) {
    for (int i = 0; i != height; i++) {
        for (int j = 0; j != widht; j++) {
            cout << *(*(array + i) + j) << " ";
        }
        cout << endl;
    }
}
И второй пример. В нем функция new вызывается всего два раза, однако думаю, что накосячил с удалением памяти.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
// fast_dynavic_2d_aray.cpp
 
#include "stdafx.h"
#include <iostream>
 
using namespace::std;
 
void array_fill(int** array, int height, int width);    // Заполнение массива
void array_print(int **array, int height, int widht);   // Печать массива
 
 
int main()
{
    int height, width;
 
    cin >> height >> width;
 
    int* arr = new int[height*width];   // Выделение памяти под значения
 
    int ** arr_ptr = new int*[height];  // Выделение памяти под массив указателей
 
    for (int i = 0; i < height; i++) {
        *(arr_ptr + i) = (arr +i * width);
    }
 
    array_fill(arr_ptr, height, width);
    array_print(arr_ptr, height, width);
 
    delete[] arr_ptr;
    delete[] arr;
 
    return 0;
}
 
void array_fill(int** array, int height, int width) {
    for (int i = 0; i < height; i++) {
        for (int j = 0; j < width; j++) {
            *(*(array + i) + j) = i * j;
        }
    }
}
void array_print(int **array, int height, int widht) {
    for (int i = 0; i != height; i++) {
        for (int j = 0; j != widht; j++) {
            cout << *(*(array + i) + j) << " ";
        }
        cout << endl;
    }
}
Целесообразен ли второй способ? И правилен ли он вообще?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.11.2018, 20:41
Ответы с готовыми решениями:

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

Сортировка двумерного динамического массива
Уважаемые форумчане, при сортировке и выводе отсортированного массива в первой строке вместо...

Cоздание двумерного динамического массива
как задать двумерный массив , границы которого m и n вводятся с клавиатуры? для одномерного...

Копия двумерного динамического массива
Как создать копию двумерного динамического массива? Имеется двумерный динамический массив. Нужно...

2
Модератор
Эксперт С++
12785 / 10240 / 6151
Регистрация: 18.12.2011
Сообщений: 27,426
06.11.2018, 21:21 2
Цитата Сообщение от CgcGb Посмотреть сообщение
*(*(array + i) + j) = i * j;
Для чего такая извращенная запись, чем Вам не угодила
C++
1
array[i][j]=i*j;
0
0 / 0 / 0
Регистрация: 08.10.2015
Сообщений: 6
06.11.2018, 21:26  [ТС] 3
Цитата Сообщение от zss Посмотреть сообщение
Для чего такая извращенная запись, чем Вам не угодила
Я в процессе обучения. Пишу так, чтобы лучше разобраться в указателях. Кстати, неплохо помогает.
Цитата Сообщение от zss Посмотреть сообщение
Для чего такая извращенная запись, чем Вам не угодила
Так можете что-то сказать о двух вариантах. Имеет ли смысл использовать второй?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.11.2018, 21:26
Помогаю со студенческими работами здесь

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

Заполнение динамического двумерного массива
Всем доброго времени суток! Остро нуждаюсь в помощи, тк сил моих больше нет бороться с этой...

Заполнение двумерного динамического массива
int **Create(int size1, int size2) { int **Arr = new int*; for (int i = 0; i &lt; size1; i++)...

Заполнение двумерного динамического массива
Объявить и заполнить двумерный динамический массив случайными числами от 10 до 50. Показать его на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru