?
Hallo Elliot000,
ich habe mal eine Neuauflage gemacht, weil ich befürchte, dass dein Quellcode grausig ist. Falls du Fragen zu folgendem Quellcode hast, schieß los.
#include <iostream>
#include <iterator>
#include <fstream>
#include <vector>
using namespace std;
// Diese Klasse muss dich eigentlich nicht interessieren.
// Du kannst sie benutzen wie ein normales zweidimensionales Array, außer dass du statt
// dem Zugriffsoperator [zeile][spalte] (zeile,spalte) schreiben musst.
template<typename T> class array_2d
{
private:
vector<T> data;
unsigned sy;
unsigned sx;
public:
array_2d(unsigned y, unsigned x) : data(y*x), sy(y), sx(x)
{
}
const T& operator()(unsigned y, unsigned x) const
{
return data[y*size_x() +x];
}
T& operator()(unsigned y, unsigned x)
{
return data[y*size_x() +x];
}
unsigned size_y() const { return sy; }
unsigned size_x() const { return sx; }
};
// Alle Matrizen einlesen.
typedef array_2d<double> matrix;
ifstream& operator>>(ifstream& file, vector<matrix>& matrizen)
{
for(unsigned zeilen=0, spalten=0; file>>zeilen>>spalten;) // Anzahl Zeilen und Spalten einer Matrix einlesen.
{
matrix m(zeilen,spalten); // Leere Matrix erzeugen.
// Matrix füllen.
for(unsigned z=0; z<zeilen; ++z)
{
for(unsigned s=0; s<spalten; ++s)
{
double wert;
file >> wert; // Ein Wert der Matrix einlesen.
m(z,s) = wert; // Eingelesener Wert entsprechend abspeichern.
}
}
// Gefüllte Matrix abspeichern.
matrizen.push_back(m);
}
return file;
}
int main()
{
/*
Aufbau der Textdatei:
1 1
2
2 2
3 1
1 3
3 3
1 2 3
4 5 6
7 8 9
*/
ifstream file("test.txt");
if( !file.is_open() )
{
cerr << "failed to open file";
return -1;
}
// Alle Matrizen einlesen.
vector<matrix> matrizen;
file >> matrizen;
// Testausgaben
for(vector<matrix>::iterator it=matrizen.begin(); it!=matrizen.end(); ++it)
{
matrix m = *it;
for(unsigned zeilen=0; zeilen!=m.size_y(); ++zeilen)
{
for(unsigned spalten=0; spalten!=m.size_x(); ++spalten)
{
cout << m(zeilen,spalten) << ' ';
}
cout << '\n';
}
cout << '\n';
}
return 0;
}