C++中vector存储自定义类实例后printVector函数输出异常问题排查求助
修复方案
方案一:用指针让vector和原始对象保持同步(推荐)
如果你希望修改原始对象时,vector里的内容自动更新,可以让vector存储对象指针:
- 修改vector的类型:
vector<Name_values*> week;
- 更新
fill函数和调用方式:
void fill (vector<Name_values*>& v, Name_values* o){ v.push_back(o); } // main里调用时传入对象的地址 fill(week, &mon); fill(week, &die); fill(week, &mit); fill(week, &don); fill(week, &fre); fill(week, &sam); fill(week, &son);
- 修改
printVector来适配指针:
void printVector(vector<Name_values*>& v){ for (Name_values* o : v){ o->printAll(); } }
方案二:修改完原始对象后同步到vector
如果不想用指针,可以在while循环结束后,把修改后的对象重新赋值给vector的对应位置:
// while循环结束后添加: week[0] = mon; week[1] = die; week[2] = mit; week[3] = don; week[4] = fre; week[5] = sam; week[6] = son;
修复条件分支错误
把最后两个判断里的die.addValue(value)改成对应的对象:
else if (name == sam.getName() || name == sam.getName2()){ sam.addValue(value); } else if (name == son.getName() || name == son.getName2()){ son.addValue(value); }
额外优化:避免除零的逻辑修正
你的printAll函数里的除零判断顺序有点问题,应该先判断size是否为0再计算,避免逻辑漏洞:
void Name_values::printAll(){ double average = 0; double sum = 0; for(int i = 0; i< values.size(); ++i){ sum += values.at(i); } if(values.size() > 0){ average = sum / values.size(); } else { average = 0; // 可以根据需求设置默认值 } cout<<"Name: "<< name <<". Average: "<< average <<endl; }
内容的提问来源于stack exchange,提问作者Frederick Anderson
相关产品推荐
相关产品推荐

