我有一個構造函數的向量作爲參數和一些成員函數,關於矢量操作的類:C++輸入運算符重載類和矢量
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 }
};
我重載輸入操作者採取一個向量的特定格式的值: 「:1 2 3 4 5> < 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;
}
我去測試我的代碼:
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);
}
我運行代碼輸入格式爲「< 5:1 2 3 4 5>」的值,而是獲得的最小和最大值打印出所有我得到的是:
Constructor 1
Main Start
<5: 1 2 3 4 5>
Constructor 2
Main End
如果我更改操作while循環重載:
while(s >> item >> rpar && rpar != '>'){
tempvec.push_back(item);
}
mc = myclass(myvec);
我得到的最小值和最大值,當我在主測試的代碼,但只能獲得一半的輸入:
Constructor 1
Main Start
<5: 1 2 3 4 5>
Constructor 2
<2: 1 3>
1
3
我知道這是爲什麼:item = 1,rpar = 2,rpar不等於'>',myvec.pushback(1)等等......
所以我認爲錯誤可能與雖然循環,但我不知道我要去哪裏錯了。
編輯:
所以我包括一個計數輸入數量比較大小:
while(s >> item && count < size && rpar != '>'){
tempvec.push_back(item);
++count; // count++ doesnt change anything
}
mc = myclass(tempvec);
s >> rpar;
我現在得到:
Constructor 1
Main Start
<5: 1 2 3 4 5>
Constructor 2
<4: 1 2 3 4>
1
4
Main End
的最後一個值不被包括在內。