Массив двумерных массивов
От: Roman__  
Дата: 27.07.08 14:57
Оценка:
Как реализовать массив, который содержит двумерные(многомерные) массивы??
Если так вообще можно.
Пишу в .Net
visual studio.net
Re: Массив двумерных массивов
От: Аноним  
Дата: 27.07.08 17:30
Оценка:
Поконкретнее можно?
Что значит "реализовать"? Можно пользоваться встроенными массивами:
int a[10][20][30] = {};


такое не подходит? если нет, то что надо точно?
Re[2]: Массив двумерных массивов
От: Iron_droid Россия  
Дата: 14.08.08 20:26
Оценка:
Здравствуйте, Roman__, Вы писали:

R__>Как реализовать массив, который содержит двумерные(многомерные) массивы??

R__>Если так вообще можно.
R__>Пишу в .Net

Если нужен именно тип "многомерный массив", то можно вот так:


        typedef int P_arr[3][4]; //определили тип "двухмерный массив"

        P_arr arr[2] = {{{01,01,01,01},{02,02,02,02},{03,03,03,03}},{{11,11,11,11},{12,12,12,12},{13,13,13,13}}};
        //создали массив из двух двумерных массивов и проинициализировали

        //доступ - как к членам обычного трёхмерного массива
    for(int i = 0; i < 2; i++) {
        for(int j = 0; j < 3; j++) {
            for(int k = 0; k < 4; k++) {
                cout << arr[i][j][k] << ' ';
            }
            cout << endl;
        }
        cout << endl;
    }
    cout << endl;


То же самое можно сделать через массив указателей на многомерные массивы:


    typedef int (*P_arr) [3][4]; //определили тип "указатель на двухмерный массив"

    P_arr arr[2]; //создали массив указателей на двухмерные массивы

    int array1[3][4] = {{1,1,1,1},{2,2,2,2},{3,3,3,3}};
    int array2[3][4] = {{11,11,11,11},{12,12,12,12},{13,13,13,13}};
        
    arr[0] = &array1;
    arr[1] = &array2;

        //доступ выглядит немного по-дурацки - необходимо сначала разыменовать указатель на массив
    for(int i = 0; i < 2; i++) {
        for(int j = 0; j < 3; j++) {
            for(int k = 0; k < 4; k++) {
                cout << (*arr[i])[j][k] << ' ';
            }
            cout << endl;
        }
        cout << endl;
    }
    cout << endl;



Если массив должен быть заполнен массивами разных размеров (но одинаковых размерностей!!!) — например, {int[2][3], int[6][12], int[11][25]}, то лучше всего воспользоваться векторами векторов

    vector<vector<vector<int> > > vec(2); //создали вектор из двухмерных векторов типа int

        // заполняем вектора
    vec.at(0).resize(2); 
    vec.at(1).resize(3);

    vec.at(0).at(0).push_back(1);

    vec.at(0).at(1).push_back(2);
    vec.at(0).at(1).push_back(3);
    vec.at(0).at(1).push_back(4);

    vec.at(1).at(0).push_back(6);
    vec.at(1).at(0).push_back(7);
    vec.at(1).at(1).push_back(8);
    vec.at(1).at(2).push_back(9);
    vec.at(1).at(2).push_back(10);
    vec.at(1).at(2).push_back(11);
    vec.at(1).at(2).push_back(12);

        //доступ к результатам - через функции size() и at(), хотя вместо последнего пойдёт и обычный оператор индексирования
    for(int i = 0; i < vec.size(); i++) {
        for(int j = 0; j < vec.at(i).size(); j++) {
            for(int k = 0; k < vec.at(i).at(j).size(); k++) {            
                        cout << vec.at(i).at(j).at(k) << ' ';
            // или так: cout << vec[i].at(j)[k] << ' ';
            // или так: cout << vec[i][j][k] << ' ';
            }
            cout << endl;
        }
        cout << endl;
    }
    cout << endl;


Получим вывод:

1
2 3 4 

6 7 
8
9 10 11 12
Re: Массив двумерных массивов
От: Кодт Россия  
Дата: 15.08.08 08:22
Оценка:
Здравствуйте, Roman__, Вы писали:

R__>Как реализовать массив, который содержит двумерные(многомерные) массивы??

R__>Если так вообще можно.

Конечно, можно — причём разнообразно.

Удобнее использовать не голые сишные массивы, а обёртку — boost::array или — если размеры переменные — то std::vector.
boost::array<boost::array<boost::array<ElemType, ZSize>, YSize>, XSize> xyz_array;

С вектором векторов — получается так называемый jagged array (массив с рваным краем), когда размеры каждого элемента не зависят друг от друга. Для того, чтобы сделать "кирпич", придётся приложить дополнительные усилия, либо взять линейный массив и транслировать координаты в линейный индекс.

R__>Пишу в .Net


Тебе нужен управляемый массив? Или ты имеешь в виду VS.net (она же VS2003, VC7)?
Перекуём баги на фичи!
Re: Массив двумерных массивов
От: alexanderfedin США http://alexander-fedin.pixels.com/
Дата: 15.08.08 19:35
Оценка:
Здравствуйте, Roman__, Вы писали:

R__>Как реализовать массив, который содержит двумерные(многомерные) массивы??

R__>Если так вообще можно.
R__>Пишу в .Net

C#:
//creates an array of two-dimensional arrays of bytes
byte[][,] myArray = new byte[10][,];
for (int i = 0; i < myArray.Length; ++i)
{
    myArray[i] = new byte[5, 3];
}
Respectfully,
Alexander Fedin.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.