Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/91: Рейтинг темы: голосов - 91, средняя оценка - 4.60
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886

Инициализация двумерного Динамического массива

14.12.2012, 19:58. Показов 17007. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня вопрос. Могу ли я создать двумерный динамический массив и инициализировать его своими значениями в коде программы.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
 
using namespace std;
 
int main()
{
    int n=6;
 
    int **M=new int*[n];
      for (int i=0;i<n;i++) M[i]=new int [n];
 
    M[n][n]=     //Попытка инициализации как статического приводит к ошибке
     {   
         1,2,3,4,5,6,
         7,8,9,8,7,6,
         5,4,3,2,1,0,
         1,2,3,4,5,6,
         7,8,9,0,9,1,
         5,3,1,1,3,4
     };
     
    return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.12.2012, 19:58
Ответы с готовыми решениями:

Инициализация двумерного динамического массива
Как задать численные значения элементам двумерного динамического массива при его инициализации? int n=2; double **a; ...

Обьявление и инициализация динамического двумерного массива в классе
Пытаюсь создать в классе динамический двумерный массив, не могу понять что я делаю не так( При вызове деструктора - ошибка class...

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

16
387 / 151 / 16
Регистрация: 12.05.2011
Сообщений: 450
14.12.2012, 20:01
Как-то так должно быть:
C++
1
2
3
4
5
6
    M[6][3]= 
     {   
         { 1,2,3,4,5,6 }, 
         { 7,8,9,8,7,6 }, 
         { 5,4,3,2,1,0 }
     };
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
14.12.2012, 20:04
Цитата Сообщение от yekka Посмотреть сообщение
Как-то так должно быть:
Так у него массив динамический
1
387 / 151 / 16
Регистрация: 12.05.2011
Сообщений: 450
14.12.2012, 20:07
Цитата Сообщение от go Посмотреть сообщение
Так у него массив динамический
тогда в цикле только

Добавлено через 1 минуту
и вообще, что за бред? какой динамический массив с заранее известным инициализатором?
2
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
14.12.2012, 20:12
Цитата Сообщение от yekka Посмотреть сообщение
и вообще, что за бред? какой динамический массив с заранее известным инициализатором?
Вот тут и оно. Сразу напрашивается std::vector с инициализацией в стиле C++11.
1
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
14.12.2012, 20:18  [ТС]
Я понимаю, что вектор напрашивается.
Но меня больше массив интересует.

Я бы сказал, что это не бред, сказал бы моя потребность. Возможно не осуществимая.

Не по теме:

А вообще люди бредили, бредили и полетели в космос

0
387 / 151 / 16
Регистрация: 12.05.2011
Сообщений: 450
14.12.2012, 20:23
Цитата Сообщение от daslex Посмотреть сообщение
двумерный динамический массив
в твоем коде, кстати, не двумерный массив, а вполне себе одномерный массив указателей.
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
14.12.2012, 20:27  [ТС]
Цитата Сообщение от yekka Посмотреть сообщение
одномерный массив указателей.
Не отводите тему. Двумерный динамический массив это одномерный массив указателей на одномерные массивы и есть.

Меня интересует только вопрос, который я спросил
0
387 / 151 / 16
Регистрация: 12.05.2011
Сообщений: 450
14.12.2012, 20:34
Цитата Сообщение от daslex Посмотреть сообщение
Двумерный динамический массив это одномерный массив указателей на одномерные массивы и есть.
это не так.


А по теме можно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <cstring>
#include <iostream>
 
using namespace std;
 
const int Etalon[6][6]=
{
    1,2,3,4,5,6,
    7,8,9,8,7,6,
    5,4,3,2,1,0,
    1,2,3,4,5,6,
    7,8,9,0,9,1,
    5,3,1,1,3,4
};
 
int main()
{
    int (*M)[6] = new int[6][6];
    memcpy(M, Etalon, sizeof(Etalon));
    std::cout << M[4][4] << std::endl;
    return 0;
}
Заметьте, с использованием настоящего двумерного массива
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
14.12.2012, 20:40  [ТС]
Ну и почему я не могу задать n?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int main()
{
    int n=6;
 
    int (*M)[n] = new int[n][n];
    memcpy(M, Etalon, sizeof(Etalon));
    std::cout << M[4][4] << std::endl;
 
    for (int i=0;i<6;i++)
    {
        for (int j=0;j<N;j++)
        {
          cout<<M[i][j]<<"  ";
        }
        cout<<endl;
    }
    return 0;
}
Вы с динамическим программированием совсем не знакомы?
0
387 / 151 / 16
Регистрация: 12.05.2011
Сообщений: 450
14.12.2012, 20:43
Цитата Сообщение от daslex Посмотреть сообщение
Вы с динамическим программированием совсем не знакомы?
боюсь снова Вас разочаровать, но, строго говоря, Ваш вопрос никак не относится к динамическому программированию
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
14.12.2012, 20:52  [ТС]

Не по теме:

Ваше не знание вас не красит. Я Вам вопрос по вашей программе. Но вы не можете ответить. Зато чего-то доказываете. Глупо.



Ответ на мой изначальный вопрос не получен.

Добавлено через 2 минуты
Показать фокус?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <cstring>
#include <iostream>
 
using namespace std;
 
 
int main()
{
    const int N=3;
    int M[3][3]=
    {
        0,1,2,
        3,4,5,
        6,7,8
    };
 
    for (int i=0;i<N*N;i++)cout<<M[0][i]<<"  ";
    return 0;
}
Чем ваш тип массивов отличается от одномерного?
0
0 / 0 / 0
Регистрация: 03.01.2020
Сообщений: 12
22.03.2020, 17:01
тоже не могу инициализировать динамический двумерный массив
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
22.03.2020, 17:38  [ТС]
Нельзя.

Добавлено через 10 минут
Всё, что можно, это инициализировать часть каждой строки по отдельности, если знать, что количество значений инициализации для строки не будет больше, чем строка может вместить.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
using namespace std;
 
int main(){
    int ROW = 3, COL = 5;
    int **arr = new int * [ROW];
    for (int i=0; i<ROW; i++) arr[i] = new int[COL]{1,2,3,4,5};
 
       for (int i=0; i<ROW; i++){
        for (int j=0; j<COL; j++){
            cout << arr[i][j] << '\t';
        }   cout << '\n';
       }
 
    for (int i=0; i<ROW; i++) delete []arr[i];
    delete []arr;
}
Если нужно инициализировать нулями, то достаточно инициализировать каждую строку пустыми фигурными скобками:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
using namespace std;
 
int main(){
    int ROW = 3, COL = 5;
    int **arr = new int * [ROW];
    for (int i=0; i<ROW; i++) arr[i] = new int[COL]{};
 
       for (int i=0; i<ROW; i++){
        for (int j=0; j<COL; j++){
            cout << arr[i][j] << '\t';
        }   cout << '\n';
       }
 
    for (int i=0; i<ROW; i++) delete []arr[i];
    delete []arr;
}
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
22.03.2020, 17:45
Maximun,
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
#include <iostream>
using namespace std;
 
int main()
{
    int n=3;
    
    int** a = new int*[n]
    {
        new int[n] {1, 2, 3},
        new int[n] {4, 5, 6},
        new int[n] {7, 8, 9}
    };
    
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)        
            cout << a[i][j] << "  ";        
    cout << "\n";    
    }    
 
system("pause");
return 0;
}
нулями проще будет запись, если нужно сообщите
1
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
22.03.2020, 18:07  [ТС]
Память течёт, и пусть рекой течёт. Ошибся я.

Добавлено через 7 минут
Так можно, как Yetty, c C++11

Добавлено через 1 минуту
И как я показал (не инициализацию самого массива), с С++11.
До С++11 было нельзя.
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
22.03.2020, 18:10
Вот так можно выделить память под двумерный динамический массив одним махом и "на месте" присвоить значения.
C++
1
2
3
4
5
6
7
#include <iostream>
 
int main()
{
    int(*p)[2] = new int[2][2]{{1,2},{3,4}};
    delete[] p;
}
Только в отличии от привычного способа в данном случае размер массива должен быть известен на этапе компиляции
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.03.2020, 18:10
Помогаю со студенческими работами здесь

Инициализация динамического массива
Создан динамический массив (при помощи функций). Пробую инициализировать при помощи фигурных скобок.:umnik: #include &quot;stdafx.h&quot;...

Инициализация динамического массива
Народ, подскажите как сделать так что бы, можно было задать размер массива через консоль, а не в коде через const (Если можете - объясните,...

Инициализация динамического массива
int main() { int a, i = 0; int *array = new int ; std::cout &lt;&lt; &quot;Enter numbers &quot; &lt;&lt; std::endl; while(std::cin &gt;&gt; a) { i &lt;...

Инициализация динамического массива
Прога генерирует случайные числа(1-100) выводит их, пока не встретится 98, сохраняя все в массиве. Но мне нужно очень, чтобы программа сама...

Инициализация Динамического массива
Друзья просмотрите пожалуйста мой динамический массив правильно ли я его длясебястолковал #include&lt;iostream&gt; using namespace...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru