Wertetabelle aus Datei mit unbekannter Größe auslesen
-
Das Puffern der Zeile ist völlig überflüssig.
#include <iostream> #include <sstream> #include <vector> #include <iterator> #include <algorithm> int main() { using namespace std; istringstream stream{"4 8 6 5 7 1 2 8"}; // Ob die beiden Paare durch einen Zeilenumbruch getrennt sind oder nicht, ist irrelevant. // (Ich nehme an, die Zeilenumbrüche sind in der Datei nur der Lesbarkeit wegen?) vector<double> x_vector, y_vector; // Die beiden vectors. double x, y; while( stream >> x >> y ) { x_vector.push_back(x); y_vector.push_back(y); } // Ausgabe copy( begin(x_vector), end(x_vector), ostream_iterator<double>{cout << "X: ", " "} ); copy( begin(y_vector), end(y_vector), ostream_iterator<double>{cout << "Y: ", " "} ); }Edit: Furble war schneller.
Mir dünkt Du willst eigentlich Positionen auslesen, oder Koordinaten, oder Tupel - jedenfalls zwei Werte, die zusammen einen Sinn ergeben.

-
std::istream& operator>>(std::istream& in, position_table& positions){ pos p; while(in>>p) positions.push_back(p); return in; }
std::istream& operator>>(std::istream& in, position_table& positions) { std::copy( std::istream_iterator<pos>(in), std::istream_iterator<pos>(), std::back_inserter(positions) ); return in; }(Ungetestet)
-
Sone schrieb:
std::istream& operator>>(std::istream& in, position_table& positions){ pos p; while(in>>p) positions.push_back(p); return in; }
std::istream& operator>>(std::istream& in, position_table& positions) { std::copy( std::istream_iterator<pos>(in), std::istream_iterator<pos>(), std::back_inserter(positions) ); return in; }(Ungetestet)
wozu?
-
wozu?
Nun, die Devise ist doch, immer die Standard-Bibliothek ausschöpfen? Nackte Schleifen vermeiden?
-
Sone schrieb:
wozu?
Nun, die Devise ist doch, immer die Standard-Bibliothek ausschöpfen? Nackte Schleifen vermeiden?
Nö, sicher nicht.
Mach besser den Fehler weg.
-
volkard schrieb:
Mach besser den Fehler weg.
Der einzige Fehler den ich sehe, ist, dass der Container nicht geleert wird.

std::istream& operator>>(std::istream& in, position_table& positions) { positions.clear(); pos p; while(in>>p) positions.push_back(p); return in; }
-
Sone schrieb:
Der einzige Fehler den ich sehe, ist, dass der Container nicht geleert wird.
Den meinte ich auch.
-
Auch falsch. Ein neuer Container sollte erstellt werden und dann move-assigned werden.
-
Kellerautomat schrieb:
Auch falsch. Ein neuer Container sollte erstellt werden und dann move-assigned werden.
Inwiefern ist das besser?
-
Kellerautomat schrieb:
Auch falsch. Ein neuer Container sollte erstellt werden und dann move-assigned werden.
Jo, man wird wohl erwarten, daß wenn der op>> failt, der vector unverändert bleibt.
-
Auch falsch
Falsch!
Ansichtsache, problemspezifisch, sollte spezifiziert warden.