LINUX.ORG.RU

История изменений

Исправление zx_gamer, (текущая версия) :

Ни в C, ни в C++ так никто не пишет.

Код должен +- быть такой:


#define SIZE_X 100
#define SIZE_Y 100

#define AT2D(ARRAY, X, Y) ARRAY[(X) + (Y)*SIZE_X]

int
main (void)
{
  int* array = malloc(sizeof(int) * SIZE_X * SIZE_Y);
  if (!array)
  {
    perror("Array allocation error");
    exit(1);
  }
  
  AT2D(array, 3, 4) = 5;
  
  free(array);

  return 0;
}

А на C++ соответственно +- такой:

template<class T>
class Matrix2D
{
private:
  Vector<T> m_data;
  const size_t m_x_size, m_y_size; 
public:
  Matrix2D (size_t x, size_t y) : m_x_size(x), m_y_size(y), m_data(x*y)
  {
  }
  
  T& operator() (size_t x, size_t y)
  {
    return m_data[m_x_size*y + x];
  }

  T operator() (size_t x, size_t y) const
  {
    return m_data[m_x_size*y + x];
  }

};

Исходная версия zx_gamer, :

Ни в C, ни в C++ так никто не пишет.

Код должен +- быть такой:


#define SIZE_X 100
#define SIZE_Y 100

#define AT2D(ARRAY, X, Y) ARRAY[(X) + (Y)*SIZE_X]

int
main (void)
{
  int* array = malloc(sizeof(int) * SIZE_X * SIZE_Y);
  if (!array)
  {
    perror("Array allocation error");
    exit(1);
  }
  
  AT2D(array, 3, 4) = 5;
  
  return 0;
}

А на C++ соответственно +- такой:

template<class T>
class Matrix2D
{
private:
  Vector<T> m_data;
  const size_t m_x_size, m_y_size; 
public:
  Matrix2D (size_t x, size_t y) : m_x_size(x), m_y_size(y), m_data(x*y)
  {
  }
  
  T& operator() (size_t x, size_t y)
  {
    return m_data[m_x_size*y + x];
  }

  T operator() (size_t x, size_t y) const
  {
    return m_data[m_x_size*y + x];
  }

};