Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
VictoryYV
1 / 1 / 0
Регистрация: 03.12.2012
Сообщений: 43
06.07.2013, 16:51     Двумерные динамические массивы-матрицы (выделение памяти) #1
Помогите пожалуйста,разобраться. В динамической памяти сначала выделяется память для указателей на соответствующие двумерные массивы(строки матрицы).после этого выделяется память для каждой стороки. Как сделать,чтобы память сначала выделялась на указатели столбцов,а затем на столбцы,чтобы я могла обращаться не к строкам,а потом столбцам- а[i][j],где ¡-строка,а j-столбец ,а вот так обращаться а[¡]-¡-тый столбец.заранее спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.07.2013, 16:51     Двумерные динамические массивы-матрицы (выделение памяти)
Посмотрите здесь:

Указатели. Динамические двумерные массивы. C++
C++ Динамические двумерные массивы
C++ Динамические двумерные массивы
C++ Двумерные динамические массивы
C++ динамические двумерные массивы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
06.07.2013, 16:54     Двумерные динамические массивы-матрицы (выделение памяти) #2
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;
}//вывод по столбцам
Gorillych
14 / 14 / 1
Регистрация: 04.07.2013
Сообщений: 76
06.07.2013, 17:16     Двумерные динамические массивы-матрицы (выделение памяти) #3
Цитата Сообщение от 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;
VictoryYV
1 / 1 / 0
Регистрация: 03.12.2012
Сообщений: 43
06.07.2013, 17:26  [ТС]     Двумерные динамические массивы-матрицы (выделение памяти) #4
мне просто надо надо составить матрицу состоящую из некоторых столбцов другой матрицы,и это все в цикле,который может повторяться очень много раз,и создавать в нем новую матрицу и копировать поэлементно очень много времени затрачивает

Добавлено через 1 минуту
просто думала,что можно объявить матрицу **а,и потом а[1]=в[1]-присваивать столбцы
Gorillych
14 / 14 / 1
Регистрация: 04.07.2013
Сообщений: 76
06.07.2013, 17:30     Двумерные динамические массивы-матрицы (выделение памяти) #5
Цитата Сообщение от VictoryYV Посмотреть сообщение
просто думала,что можно объявить матрицу **а,и потом а[1]=в[1]-присваивать столбцы
ну ради бога, присваивайте. только надо правильно посчитать индекс элемента и все. Какая конкретно у Вас задача?
VictoryYV
1 / 1 / 0
Регистрация: 03.12.2012
Сообщений: 43
06.07.2013, 17:35  [ТС]     Двумерные динамические массивы-матрицы (выделение памяти) #6
поиск помеухостойчивых кодов,и мне там в цикле для проверки линейной независимости столбцов матрицы нужно работать со столбцами,и тут косяк...а как вы говорите подсчитать индекс?просто в цикле поэлементно присваивать очень долго,у меня долго компилировалось и в итоге ничего не вышло
Gorillych
14 / 14 / 1
Регистрация: 04.07.2013
Сообщений: 76
06.07.2013, 17:37     Двумерные динамические массивы-матрицы (выделение памяти) #7
VictoryYV, показывайте код и опишите задачу подробнее - что на входе, как обрабатывать вход и что на выходе
VictoryYV
1 / 1 / 0
Регистрация: 03.12.2012
Сообщений: 43
06.07.2013, 17:51  [ТС]     Двумерные динамические массивы-матрицы (выделение памяти) #8
в функции search_k
Вложения
Тип файла: zip код.zip (1.3 Кб, 10 просмотров)
VictoryYV
1 / 1 / 0
Регистрация: 03.12.2012
Сообщений: 43
06.07.2013, 17:53  [ТС]     Двумерные динамические массивы-матрицы (выделение памяти) #9
This application has required the Runtime to terminate it in an unusual way.-вот что мне пишет,когда я ищу к для матрицы-3 строки,4 столбца
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.07.2013, 00:21     Двумерные динамические массивы-матрицы (выделение памяти)
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Gorillych
14 / 14 / 1
Регистрация: 04.07.2013
Сообщений: 76
07.07.2013, 00:21     Двумерные динамические массивы-матрицы (выделение памяти) #10
VictoryYV, Вы все-таки расскажите подробнее, что должна делать каждая функция - arr, linnez, search_k?
Yandex
Объявления
07.07.2013, 00:21     Двумерные динамические массивы-матрицы (выделение памяти)
Ответ Создать тему
Опции темы

Текущее время: 17:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru