Matrizen in C++ (Matrizen in C++), lesson, Seite 722668
https://www.purl.org/stefan_ram/pub/matrizen_c++ (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram

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; }

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram722668 stefan_ram:722668 Matrizen in C++ Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd722668, slrprddef722668, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/matrizen_c++