LINUX.ORG.RU

C++ && array


0

0

Здраствуйте.

Немного изучил С++. Как "лучше\удобнее" на данном языке описываются 2-мерные массивы. Или есть ли уже готовое колесо? int **a, b[3][4]; не предлагать ...

Спасибо.

anonymous

> int **a, b[3][4]; не предлагать ...

хорошо. тогда вот так

class Arr2D 
{
  private:
     int * m_Arr;
     uint m_Xn;

  inline Arr2D(uint _Xn,uint _Yn):m_Arr(new int[_Xn*_Yn]),m_Xn(_Xn)
     {...}    
  ...
 
  inline int& operator () (uint _X, uint _Y) 
      { return m_Arr[_X*m_Xn+_Y]; }   
};

ukez
()
Ответ на: комментарий от ukez

>vector<vector<...>>

vector<vector<...> >

будет правильнее /убогий тут синтаксис/ :)

и почему люди пойнтеров боятся и бла[][]?

Pi ★★★★★
()
Ответ на: комментарий от ukez

Лучше так:
#include <iostream>
#include <cstring>


template <typename T>
class Table
{
   private:
      T* mas;
      size_t rows;
   public:
      Table(size_t Rows, size_t Cols) : mas(new T[Rows*Cols]),rows(Rows)
      {
         memset(mas,0,Rows*Cols*sizeof(T));
      }
      virtual ~Table() {delete [] mas;}
      T* operator[](size_t row) {return mas+row*rows;}
};


int main()
{
   Table<int> t_int(5,5);
   for(size_t i = 0; i < 5; ++i) t_int[i][i] = 1; // Identity matrix
   for(size_t y = 0; y < 5; ++y)
   {
      for(size_t x = 0; x < 5; ++x)
         std::cout << t_int[y][x] << " ";
      std::cout << std::endl;
   }
   return 0;
}

Результат:
1 0 0 0 0 
0 1 0 0 0 
0 0 1 0 0 
0 0 0 1 0 
0 0 0 0 1 

Flogger_d
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.