Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.12.2011, 00:55   #1
Phoenixx
 
Регистрация: 29.12.2011
Сообщений: 6
По умолчанию Инициализация двумерного массива.

Доброго времени суток!

Нужно инициализировать двумерный массив используя конструктор класса. Проблемма в том, что выдает ошибку : "В качестве инициализации массива можно использовать только "()".

PHP код:
#include<iostream>
using namespace std;
#include<conio.h>
////////////////////////////////////////////////////////////
class clMatrix
{
  private:

    static const 
int MAX 3;
    
int Matr [MAX][MAX];

  public:
    
    
clMatrix int m1int m2int m3,
               
int m4int m5int m6,
               
int m7int m8int m9): 
      
Matr m1 ,m2 ,m3
             m4
m5m6
             m7
m8m9) {}
    
void showMatr () const
      {
      for ( 
int i 0MAXi++ )
        for ( 
int j 0MAXj++ )
          
cout << Matr [i][j];
      }
};
/////////////////////////////////////////////////////////////      
int main ()
{
  
clMatrix M1
  
(5482,
   
33682,
   
71059);
  
M1.showMatr ();
  
getch ();
  return 
0;

Phoenixx вне форума Ответить с цитированием
Старый 29.12.2011, 01:08   #2
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Топорный вариант выглядит вот так:

Код:
class clMatrix 
{ 
  private: 

    static const int MAX = 3; 
    int Matr [MAX][MAX]; 

  public: 
     
    clMatrix ( int m1, int m2, int m3, int m4, int m5, int m6, int m7, int m8, int m9)  
    {
        Matr[0][0]=m1; Matr[0][1]=m2; Matr[0][2]=m3; 
        Matr[1][0]=m4; Matr[1][1]=m5; Matr[1][2]=m6;
        Matr[2][0]=m7; Matr[2][1]=m8; Matr[2][2]=m9;
    } 
    void showMatr () const 
    {
        for ( int i = 0; i < MAX; i++ ) 
        {
            for ( int j = 0; j < MAX; j++ )   {   cout << Matr [i][j]<<"\t";  }
            cout << endl; 
        }
    } 
}; 
/////////////////////////////////////////////////////////////       
int main () 
{ 
  clMatrix M1 
  (5, 48, 2, 
   33, 68, 2, 
   7, 10, 59); 
  M1.showMatr (); 
  getch (); 
  return 0; 
}
_Bers вне форума Ответить с цитированием
Старый 29.12.2011, 01:16   #3
Phoenixx
 
Регистрация: 29.12.2011
Сообщений: 6
По умолчанию

А какой вариант не топорный?
Phoenixx вне форума Ответить с цитированием
Старый 29.12.2011, 01:23   #4
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Phoenixx Посмотреть сообщение
А какой вариант не топорный?
Который не прибивает гвоздями размеры матрицы (количество строк и столбцов) к магическим числам.

И поэтому, у "правильной" матрицы есть возможность менять свои размеры на лету.

А в твоём примере, если тебе вдруг понадобится матрица, допустим, не 3 на 3, а 4 на 4, то тебе придётся ручками править уже написанный и протестированный код. А потом заново все тестировать.


Дизайн работы матрицы может выглядить так:

Код:
//псевдокод
TMatrix<тип_элементов> myMatr(размеры_матрицы, стартовые_значения_элементов);

Причем, имхо, в качестве стартовых значений матрицы лучше всего использовать одномерный массив, ибо с ним проще всего работать.
А многомерные массивы на с++ - эт ваще шлак, имхо.

В конечном итоге "многомерность" любого массива фиктивная. То бишь, данные в памяти все равно располагаются линейно.

Так почему бы сразу не работать с линейными массивами?
А многомерные массивы имитировать с помощью массивов массивов.

Массив массивов проще понять, и легче трансформировать. Он очень гибкий в плане любых модификаций.

Например отдельные строки матрицы основанной на массиве массивов не обязаны быть одинаковой длины, и поэтому очень легко сделать вот такую матрицу:
Код:
111111  //<--- вот это первый массив
222       //<--- вот это второй массив
333333  //<--- вот это третий массив
//А все вместе - это массив массивов. То есть, массив, который хранит внутри себя другие массивы
В массив массивов легко добавлять и удалять элементы)

Последний раз редактировалось _Bers; 29.12.2011 в 01:33.
_Bers вне форума Ответить с цитированием
Старый 29.12.2011, 18:17   #5
Phoenixx
 
Регистрация: 29.12.2011
Сообщений: 6
По умолчанию

Понятно... Но у меня в задан двумерный массив фиксированного размера, поэтому воспользуюсь первым вариантом. Спасибо.
Phoenixx вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как обнулить элементы строки двумерного массива, содержащей наибольшее количество элементов одномерного массива griignat Помощь студентам 1 22.11.2011 20:04
инициализация массива parazzzitka93 Общие вопросы C/C++ 11 02.04.2011 21:01
VS 2008 C# - Инициализация массива обьектов kasper298 Помощь студентам 0 17.11.2009 23:40
инициализация массива Arcueid1691 Паскаль, Turbo Pascal, PascalABC.NET 2 01.06.2009 02:36
Инициализация массива указателей. Непонятно !!! Adamant Общие вопросы C/C++ 2 05.11.2007 16:22