Ich habe eine Klasse mit einem Konstruktor, der einen Vektor als Argument und einige Mitgliedsfunktionen, die auf dem Vektor arbeiten nimmt:C++ Eingabeoperator für die Klasse und Vektor-Überlastung
class myclass{
vector<double> myvec;
public:
myclass(){ cout << "Constructor 1 " << endl; }
myclass(const vector <double> &v){ "Constructor 2 " << endl; }
ostream& print(ostream &s) const { //print function used in overloading output operator }
double minimum(){ //return min value of vector }
double maximum(){ //return max value of vector }
};
I den Eingangsoperator überlastete zu ergreifen die Werte eines Vektors in einem bestimmten Format: "< 5: 1 2 3 4 5>":
istream& operator>>(istream &s, myclass &mc) {
int size;
double item;
vector<double> tempvec;
char lpar, colon, rpar;
if (s >> lpar) {
if ((s >> size >> colon) && (lpar == '<' && colon == ':')){
tempvec[size];
while(s >> item && rpar != '>'){
tempvec.push_back(item);
}
mc = myclass(tempvec);
s >> rpar;
}else{
s.setstate(ios::badbit);
}
}
return s;
}
ich gehe meinen Code zu testen:
int main(){
myclass mc;
cout << "Main Start" << endl;
while (cin >> mc)
cout << mc << endl << mc.minimum() << endl << mc.maximum() << endl;
if (cin.bad()) cerr << "\nBad input\n\n";
cout << "Main Start" << endl;
return (0);
}
Ich betreibe die Werte im Format, um die Code-Eingabe „< 5: 1 2 3 4 5>“, sondern die minimalen und maximalen Wert des Erhaltens ausgedruckt alles, was ich bekommen ist:
Constructor 1
Main Start
<5: 1 2 3 4 5>
Constructor 2
Main End
Wenn ich ändern Sie die while-Schleife in den Bediener Überlastung an:
while(s >> item >> rpar && rpar != '>'){
tempvec.push_back(item);
}
mc = myclass(myvec);
ich erhalte die min und max, wenn ich den Code in Haupt testen, aber nur bekommen die Hälfte der Eingänge:
Constructor 1
Main Start
<5: 1 2 3 4 5>
Constructor 2
<2: 1 3>
1
3
Ich verstehe, warum dies ist: item = 1, rpar = 2, rpar ist nicht gleich '>', myvec.pushback (1) und so weiter ...
Also ich denke, der Fehler könnte mit dem zu tun haben While-Schleife, aber ich bin mir nicht sicher, wo ich falsch liege.
Edit:
So enthalten ich eine Zählung die Anzahl der Eingänge zu der Größe zu vergleichen:
while(s >> item && count < size && rpar != '>'){
tempvec.push_back(item);
++count; // count++ doesnt change anything
}
mc = myclass(tempvec);
s >> rpar;
ich jetzt:
Constructor 1
Main Start
<5: 1 2 3 4 5>
Constructor 2
<4: 1 2 3 4>
1
4
Main End
Der letzte Wert ist nicht enthalten sein.