Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
1 / 1 / 0
Регистрация: 03.12.2012
Сообщений: 43

Двумерные динамические массивы-матрицы (выделение памяти)

06.07.2013, 16:51. Показов 2967. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста,разобраться. В динамической памяти сначала выделяется память для указателей на соответствующие двумерные массивы(строки матрицы).после этого выделяется память для каждой стороки. Как сделать,чтобы память сначала выделялась на указатели столбцов,а затем на столбцы,чтобы я могла обращаться не к строкам,а потом столбцам- а[i][j],где ¡-строка,а j-столбец ,а вот так обращаться а[¡]-¡-тый столбец.заранее спасибо
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.07.2013, 16:51
Ответы с готовыми решениями:

Динамические массивы структур и выделение (перевыделение) памяти
Здравствуйте. Делаю систему обновления. С ftp и unicode разобрался. теперь встала проблема с сылками и размерностями массивов. В общем есть...

Динамические двумерные массивы
#include <iostream> #include <clocale> #include <cstdlib> #include <ctime> int** Create(size_t n, size_t m) { // Создание...

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

9
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
06.07.2013, 16:54
VictoryYV, эм, вместо a[i][j] пишете a[j][i]. В памяти оно точно так же выделяется. Допустим
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
for (int i = 0; i < n; ++i)
{
for (int j = 0; j < n; ++j)
cout << a[i][j];
cout << endl;
}//вывод по строкам
 
for (int i = 0; i < n; ++i)
{
for (int j = 0; j < n; ++j)
cout << a[j][i];
cout << endl;
}//вывод по столбцам
0
15 / 15 / 3
Регистрация: 04.07.2013
Сообщений: 76
06.07.2013, 17:16
Цитата Сообщение от VictoryYV Посмотреть сообщение
Помогите пожалуйста,разобраться. В динамической памяти сначала выделяется память для указателей на соответствующие двумерные массивы(строки матрицы).после этого выделяется память для каждой стороки. Как сделать,чтобы память сначала выделялась на указатели столбцов,а затем на столбцы,чтобы я могла обращаться не к строкам,а потом столбцам- а[i][j],где ¡-строка,а j-столбец ,а вот так обращаться а[¡]-¡-тый столбец.заранее спасибо
В С++ динамический двумерный массив - ВСЕГДА массив указателей на строки данных. Выделять память под столбцы явно нельзя. Поэтому старайтесь избегать конструкций типа Mas[m][n] или **Mas, если Mas - массив простых типов char, int, float и т.д. Наиболее эффективный по скорости доступа к памяти способ работы с массивами - выделение памяти одним куском:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
unsigned int  NumRows = 5;//Количество строк двумерного массива
unsigned int  NumCols = 5;//Количество столбцов двумерного массива
unsigned int 2dArrayLength = NumRows*NumCols;//длина куска памяти двумерного массива
float *2dArray = new float[2dArrayLength]();//Выделение памяти под двумерный массив одним куском и инициализация его элементов нулями
unsigned int RowIdx = 3;//Индекс элемента строки двумерного массива
unsigned int ColumnIdx = 3;//Индекс элемента столбца двумерного массива
float ElemFrom2dArray = 2dArray[ColumnIdx+RowIdx*NumCols];//Доступ к элементу двумерного массива
delete[] 2dArray;// Освобождение памяти
 
unsigned int NumArrays = 10;//Количество двумерных массивов в трехмерном массиве
float *3dArray =  new float[2dArrayLength*NumArrays]();
unsigned int 2darrayIdx = 5;//Индекс двумерного массива в трехмерном массиве
float ElemFrom3dArray = 3dArray[ColumnIdx+RowIdx*NumCols+2darrayIdx*2dArrayLength];//Доступ к элементу трехмерного массива
delete[] 3dArray;
0
1 / 1 / 0
Регистрация: 03.12.2012
Сообщений: 43
06.07.2013, 17:26  [ТС]
мне просто надо надо составить матрицу состоящую из некоторых столбцов другой матрицы,и это все в цикле,который может повторяться очень много раз,и создавать в нем новую матрицу и копировать поэлементно очень много времени затрачивает

Добавлено через 1 минуту
просто думала,что можно объявить матрицу **а,и потом а[1]=в[1]-присваивать столбцы
0
15 / 15 / 3
Регистрация: 04.07.2013
Сообщений: 76
06.07.2013, 17:30
Цитата Сообщение от VictoryYV Посмотреть сообщение
просто думала,что можно объявить матрицу **а,и потом а[1]=в[1]-присваивать столбцы
ну ради бога, присваивайте. только надо правильно посчитать индекс элемента и все. Какая конкретно у Вас задача?
0
1 / 1 / 0
Регистрация: 03.12.2012
Сообщений: 43
06.07.2013, 17:35  [ТС]
поиск помеухостойчивых кодов,и мне там в цикле для проверки линейной независимости столбцов матрицы нужно работать со столбцами,и тут косяк...а как вы говорите подсчитать индекс?просто в цикле поэлементно присваивать очень долго,у меня долго компилировалось и в итоге ничего не вышло
0
15 / 15 / 3
Регистрация: 04.07.2013
Сообщений: 76
06.07.2013, 17:37
VictoryYV, показывайте код и опишите задачу подробнее - что на входе, как обрабатывать вход и что на выходе
0
1 / 1 / 0
Регистрация: 03.12.2012
Сообщений: 43
06.07.2013, 17:51  [ТС]
в функции search_k
Вложения
Тип файла: zip код.zip (1.3 Кб, 13 просмотров)
0
1 / 1 / 0
Регистрация: 03.12.2012
Сообщений: 43
06.07.2013, 17:53  [ТС]
This application has required the Runtime to terminate it in an unusual way.-вот что мне пишет,когда я ищу к для матрицы-3 строки,4 столбца
0
15 / 15 / 3
Регистрация: 04.07.2013
Сообщений: 76
07.07.2013, 00:21
VictoryYV, Вы все-таки расскажите подробнее, что должна делать каждая функция - arr, linnez, search_k?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.07.2013, 00:21
Помогаю со студенческими работами здесь

Двумерные динамические массивы заполняются неверно
Помогите найти ошибку в коде, массив правильно не заполняется. void vvod(double *a, double *b, int n) { int i; cout &lt;&lt;...

Нужно изменить двумерные массивы на динамические
Добрый вечер. Не помешала бы ваша помощь,в моей лабе,нужно заменить двумерные массивы на динамические. К сожалению,я не знаю как это...

Двумерные динамические массивы, представленные одномерными массивами
Как организовать выделение и освобождение памяти в виде подпрограмм в двумерном массиве? Т. е. чтобы операторы new double и delete...

Нужен реферат на тему динамические и двумерные массивы
извиняюсь если тему не там создал,вообщем задали реферат на тему динамические и двумерные массивы на один лист, в сети нечего не нашел,и...

Динамические двумерные массивы через указатели. Как это происходит?
Вот типичная идентификация двумерного массива (NxM): int** mass = new int*; for(i=0; i&lt;N; i++) mass = new int; Помогите...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru