?
beginner58 schrieb:
Also, mein Programm liest 100 Int-Werte aus einer Datei aus und speichert sie in dem Vektor proctimes. Das scheint zu funktionieren.
Um genau zu sein extrahierst Du aus jeder Zeile ab der vierten ints am Zeilenfang. Das mache ich im folgenden nicht, sondern gehe von Zeilen aus, die komplett aus ints bestehen. Wie Du es hier schreibst:
beginner58 schrieb:
Für das Einlesen habe ich eine Datei mit 5 Zeilen à 20 Werten.
beginner58 schrieb:
Dann möchte mit der Funktion Completion die Summe aus den ersten 20 Werten dieses Vektors bilden und die jeweiligen Zwischenergebnisse in einem weiteren Vektor speichern.
Das ist partial_sum() aus <numeric> und damit einer der Fälle, in denen Du ordentlich Zeilen und Gehirnschmalz sparen kannst, indem Du Dir einen Überblick über die Standardbibliothek verschaffst - speziell <algorithm> und <numeric> . Dort würde ich immer als erstes schauen, wenn ich irgendwas mit Bereichen aus Containern machen muss.
Ausserdem gibt es ein Idiom, für das Entfernen von Zeilen aus streams.
Ob das kopieren mit copy() lesbarer ist sei mal aussen vor - ich will ja die Bibliothek vorstellen.
#include <iostream>
#include <vector>
#include <iterator> // istream_iterator, ostream_iterator, back_inserter
#include <limits> // numeric_limits<>
#include <numeric> // partial_sum
#include <algorithm> // copy
#include <fstream>
int main(){
using namespace std;
vector<int> proctimes;
proctimes.reserve(20);
ifstream infile1("data.txt");
if(!infile1.is_open()){
cerr << "Fehler beim oeffnen der Datei.\n";
return -1;
}
// drei Zeilen konsumieren und ignorieren
for(int i=0; i<3; ++i)
infile1.ignore(numeric_limits<streamsize>::max(), '\n');
// solange ints lesen, wie es geht
copy(istream_iterator<int>(infile1), istream_iterator<int>(), back_inserter(proctimes));
if(proctimes.size()<20){
cerr << "Nicht genuegend Daten.\n";
return -1;
}
// Summe bilden mit Zwischenergebnissen
vector<int> Cm2;
Cm2.reserve(20);
partial_sum(proctimes.begin(), proctimes.begin()+20, back_inserter(Cm2));
// Kontrollausgabe:
copy(Cm2.begin(), Cm2.end(), ostream_iterator<int>(cout, " "));
cout << endl;
}