Mehrdimensionale Reihungen in C++
Rohfassung: Diese Lektion enthält nur einige Notizen, ist aber noch nicht richtig ausformuliert.
Reihung mit »valarray«
Obwohl valarray eigentlich genau dafür gedacht ist, ist diese Klasse in der Praxis doch so wenig nützlich und/oder schlecht implementiert, daß sie praktisch nicht benutzt wird.
Reihung mit »new«
Die manuelle Speicherverwaltung mit »new« ist fehlerträchtig und veraltet.
- main.cpp
#include <iostream>
#include <ostream>
int main()
{ constexpr int rows = 3;
constexpr int cols = 2;
double **array;
array = new double*[ rows ];
for( int row = 0; row < rows; ++row )array[ row ] = new double[ cols ];
for( int row = 0; row < rows; ++row )
for( int col = 0; col < cols; ++col )array[ row ][ col ]= row + col + 10;
for( int row = 0; row < rows; ++row )
{ for( int col = 0; col < cols; ++col )::std::cout << array[ row ][ col ]<<
( col < cols - 1 ? ", " : "" );
::std::cout << '\n'; }
for( int row = 0; row < rows; ++row )delete[] array[ row ];
delete[] array; }
::std::vector
- main.cpp
#include <iostream>
#include <ostream>
#include <vector>
int main()
{ ::std::vector< ::std::vector< double >>vector;
constexpr int height = 3;
constexpr int width = 2;
vector.resize( height );
for( int i = 0; i < height; ++i )vector.at( i ).resize( width );
for( int i = 0; i < height; ++i )
for( int j = 0; j < width; ++j )vector.at( i ).at( j )= i + j + 10;
for( int i = 0; i < height; ++i )
{ for( int j = 0; j < width; ++j )::std::cout << vector.at( i ).at( j ) <<
( j < width - 1 ? ", " : "" );
::std::cout << '\n'; }}
Möglichst wenig kopieren, eher Referenzen benutzen!
/* In C++ gibt es viele verschiedene Moeglichkeiten, Vektoren
und Matrizen darzustellen: Reihungen, ::std::vector, valarray
oder ::std::array. Fuer ernsthafte Anwendungen sollte die
Bibliothek "Blitz++" verwendet werden.Dieses Programm verwendet ::std::array und zeigt die Multiplikation
einer Matrix m mit einem Vektor v. Das Ergebnis findet sich dann
im Vektor p wieder.1 2 3 = v
1 3 4
m = 2 6 8
9 0 12 */#include <initializer_list>
#include <iostream>
#include <ostream>
#include <array>
#include <string>
using namespace ::std::literals;int main()
{ ::std::array< int, 3 >v{ { 1, 2, 3 }};
::std::array< std::array< int, 3 >, 3 >m ={ { { { 1, 3, 4 }}, { { 2, 6, 8 }}, { { 9, 0, 12 }}}};
::std::array< int, 3 >p{ { 0, 0, 0 }};
for( int i=0; i < 3; ++i )for( int j = 0; j < 3; ++j )p[ i ]+=( m[ i ][ j ]*v[ j ]);
for( int i=0; i < 3; ++i )::std::cout << p[ i ]<< "\n"s; }