Wie lese ich in C++ mehrere Werte ein?

4 Antworten

Der dümmstmögliche Ansatz wäre:

Bei jeder Eingabe ein neues Array mit Länge + 1 erzeugen, alte Daten rüberkopieren, neuen Wert anhängen.

Der zweitdümmste Ansatz wäre:

Anzahl der geplanten Eingaben vorher abfragen, dann nur die eingegebene Anzahl auch zulassen.

Der Standardansatz wäre:

Nimm eine Liste statt eines Array.

Du könntest zum Beispiel erst einmal alle Werte in einer einfach verketteten Liste speichern, da musst du vorher nicht wissen wie viele da genau kommen.

Nehmen wir mal an, deine Datei "data.txt" hat folgenden Inhalt:

12 34 56 78
910 1112 1314
23
42

Dann liest dieses Programm die Zahlen ein, hängt sie ans Ende einer Liste, und gibt diese anschließend aus:

#include <algorithm> // copy
#include <fstream> // ifstream
#include <iostream> // cout, endl
#include <iterator> // back_inserter, begin, end, ostream_iterator
#include <list> // list

int main(void) {
	using namespace ::std;

	using num_type = int;

	ifstream in { "data.txt" };
	list<num_type> out;

	copy(
		istream_iterator<num_type> { in },
		istream_iterator<num_type> {},
		back_inserter(out)
	);

	cout << out.size() << " elements:" << endl;

	copy(
		begin(out),
		end(out),
		ostream_iterator<num_type> { cout, "\n" }
	);
}

ie Ausgabe sieht wie folgt aus:

9 elements:
12
34
56
78
910
1112
1314
23
42

Anstelle einer Liste kannst du auch ein <deque> nehmen, wenn du wahlfreien Zugriff mit blitzschnellem Anfügen ans Ende kombinieren willst. Aber da in allen anderen Antworten die Rede von einer Liste ist, hab ich mich mal dafür entschieden.

Eine <forward_list> hat den kleinsten Laufzeit-Overhead, ist aber evtl. nicht das, was du brauchst, und ein <vector> dürfte wegen bereits erwähntem Speicher-Umher-Geschubse weg fallen. :)

Woher ich das weiß:Berufserfahrung

Wenn du nicht weißt, wie viele Werte das sind, würde ich eher eine Liste als ein Array verwenden.

Alternativ kannst du in einer ersten Schleife die Anzahl der Werte bestimmen und dann mit "int * values = new int(number_of_values);" den entsprechenden Speicher besorgen.

Woher ich das weiß:Hobby – Hobby seit meiner Jugend