Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как динамически задать двумерный массив 
:(
    Опции темы
Competitor
Дата 9.4.2006, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 23.3.2005
Где: Tula

Репутация: нет
Всего: -1



Как динамически задать двумерный массив, т.е. arr[k][m].
Прошу пример.
PM MAIL WWW   Вверх
MAKCim
Дата 9.4.2006, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



1.
Код

vector<vector<_Type> > w;     // здесь _Type - любой тип

2.
Код

_Type** matrix=new _Type* [Size_a];
for (int i=0; i<Size_a; i++) matrix[i]=new _Type [Size_b];

_Type - любой тип, Size_a, Size_b - размеры
3.
Код

_Type* matrix=new _Type [Size_a*Size_b];         // преобразование матрицы в вектор



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
darkart
Дата 9.4.2006, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 379
Регистрация: 9.11.2005

Репутация: 2
Всего: 31



На два вопроса...
Код

#include<iostream>
#include<stdlib.h>
#include<conio.h>
#include<time.h>
using namespace std;
int main()
{
                srand((unsigned int)time(NULL));
    int** Arr;//описание массива
    int i,j,rows,columns,min,max;//i,j - счетчики, rows - кол-во строк, columns - кол-во столбцов
    //min - минимальное значение отрезка, max - максимальное значение отрезка
    cout<<"Please enter number of rows:\n";
    cin>>rows;//ввод кол-ва строк
    cout<<"Please enter number of columns:\n";
    cin>>columns;//ввод кол-ва столбцов
    cout<<"Please enter min value:\n";
    cin>>min;//ввод минимальной границы
    cout<<"Please enter max value:\n";
    cin>>max;//ввод максимальной границы
    Arr=new int*[rows];//создание указателей на строки
    for(i=0;i<rows;i++)
        Arr[i]=new int[columns];//указатели на строку длины columns
    for(i=0;i<rows;i++)
        for(j=0;j<columns;j++)
            Arr[i][j]=min+rand()%(max-min+1);//ф-ла для диапазона от min до max (max>=min)
    cout<<"Random-dynamic matrix:\n";
    for(i=0;i<rows;i++)//печать матрицы
    {
        for(j=0;j<columns-1;j++)
            cout<<Arr[i][j]<<" ";
        cout<<Arr[i][columns-1]<<"\n";
    }
    //удаление матрицы
    for(i=0;i<rows;i++)
        delete[] Arr[i];
    delete[] Arr;
    getch();
    return 0;
}

PM MAIL WWW ICQ Skype GTalk   Вверх
koljan
Дата 10.4.2006, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


VIP
**


Профиль
Группа: Участник
Сообщений: 430
Регистрация: 18.12.2005
Где: г.Архангельск

Репутация: нет
Всего: 1



а разве нельзя сделать
Код

int mas[][];



--------------------
PM MAIL ICQ   Вверх
Necias
Дата 11.4.2006, 07:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 7.4.2006

Репутация: нет
Всего: 2



Код

 void * arrmm = malloc((size_t)(sizeof(Tip_elementa_dva)*kolvo_elementov));
Tip_elementa_dva ** enm = (Tip_elementa_dva**)arrmm;

люблю экстрим smile
таким образом можно полностью динамически работать с массивами, создавать рваные таблицы и тд
PM MAIL ICQ   Вверх
MAKCim
Дата 11.4.2006, 08:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата

а разве нельзя сделать

нет
Цитата

таким образом можно полностью динамически работать с массивами, создавать рваные таблицы и тд

в С
(в С++ есть средства по-лучше)


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
threef
Дата 11.4.2006, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 27.10.2005
Где: Запорожье

Репутация: 9
Всего: 10



Цитата

таким образом можно полностью динамически работать с массивами, создавать рваные таблицы и тд


Фиксированный размер строки - Tip_Elementa_2
Зато имеется возможность свободно передвигаться в пределах одного блока памяти.
Еще вариант:
Код

template <class type>
type ** create(int m,int n)
{
  void *heap=new type[m*n]; //память для содержимого
  type ** rez=new type*[m]; // память для массива адресов строк
  for(int i=0;i<m;i++)
  { rez[i]=heap+i*n; } //задаем адреса строк
   return rez;
}
template <class type>
void destroy(type ** arr)
{
  delete []*arr;// удаляем содержимое
   delete [] arr; // удаляем массив адресов строк
}


здесь весь массив находится в непрерывном блоке памяти, не зависит от длины "строки"

Это сообщение отредактировал(а) threef - 11.4.2006, 12:49
PM MAIL   Вверх
Hose
Дата 12.4.2006, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 11.4.2006

Репутация: 1
Всего: 1



Код

    int m = 5;
    int n = 10;
    int **Arr;
    Arr = new int*[m] ;
    for (int i = 0; i < m; i++)
        Arr[i] = new int[n];

                // что-то делаем с массивом
    Arr[4][9] = 213;
                // освобождаем память
    for (int i = 0; i < m; i++)
        delete[] Arr[i];

    delete[] Arr;

PM MAIL   Вверх
threef
Дата 12.4.2006, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 27.10.2005
Где: Запорожье

Репутация: 9
Всего: 10



Hose , ты списал пост у darkart
PM MAIL   Вверх
Hose
Дата 14.4.2006, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 11.4.2006

Репутация: 1
Всего: 1



Похоже на то
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1031 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.