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 просмотров]