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

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

06.07.2013, 16:51. Показов 2947. Ответов 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
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru