【发布时间】:2016-12-03 01:24:54
【问题描述】:
我有一个带有构造函数的类,该构造函数将向量作为参数以及一些对向量进行操作的成员函数:
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 }
};
我已经重载了输入运算符,以获取特定格式的向量值:“”:
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);
}
我运行代码以“”格式输入值,但我得到的不是打印出最小值和最大值:
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);
当我在 main 中测试代码时,我得到了最小值和最大值,但只得到了一半的输入:
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 循环有关,但我不确定我哪里出错了。
编辑:
所以我加入了一个计数来比较输入的数量和大小:
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
最后一个值不包括在内。
【问题讨论】:
标签: c++ vector input operator-overloading