БлогNot. C++: двумерная матрица на основе контейнера

C++: двумерная матрица на основе контейнера

Двумерную матрицу из объектов нужного типа в QT легко сделать с помощью QVector или же другого списочного контейнера, например, QList.

Основная идея очень проста - организовать вектор, состоящий из векторов:

QVector < QVector <double> > Matrix;

То же самое можно сделать и с помощью std::vector.

В том и другом случае можно не менять размерность после создания контейнера, а указать её сразу же аргументами конструктора. Доступ к элементу будет осуществляться обычным способом, в виде a[i][j].

Все 4 способа показаны ниже в маленькой программке (консольное приложение QT), везде использован тип данных double, но это необязательно, в качестве элементов наших матриц можно брать объекты любого простого или составного типа.

Часть кода, основанная на std::vector, сработает и в Visual Studio.

Ну и помните, что на самом деле, "обычные" двумерные массивы тоже являются массивами массивов :)

#include <iostream>
#include <vector>
#include <QDebug>

int main() {
 const int n=3,m=4;

 QVector< QVector<double> > Matrix;
 Matrix.resize(n);
 for (int i=0; i<n; i++) Matrix[i].resize(m);
 for (int i=0; i<n; i++)
 for (int j=0; j<m; j++) Matrix[i][j] = i+j;
 qDebug() << Matrix;

 QVector< QVector<double> > Matrix0(n,QVector<double>(m,0));
 for (int i=0; i<n; i++)
 for (int j=0; j<m; j++) Matrix0[i][j] = i+j;
 qDebug() << Matrix0;

 std::vector< std::vector<double> >  Matrix1;
 Matrix1.resize(n);
 for (int i=0; i<n; i++) Matrix1[i].resize(m);
 for (int i=0; i<n; i++) {
  std::cout << std::endl;
  for (int j=0; j<m; j++) {
      Matrix1[i][j] = i+j;
      std::cout << Matrix1[i][j] << " ";
  }
 }

 std::vector< std::vector<double> > Matrix2(n, std::vector<double>(m,0));
 for (int i=0; i<n; i++) {
  std::cout << std::endl;
  for (int j=0; j<m; j++) {
      Matrix2[i][j] = i+j;
      std::cout << Matrix2[i][j] << " ";
  }
 }

 return 0;
}

13.04.2018, 22:17 [4489 просмотров]


теги: qt c++ список программирование studio

К этой статье пока нет комментариев, Ваш будет первым