c++练习
题目:
高性能运算需要统计年计算量,按core/小时收费
要求:
1.找出使用时间 <24小时的用户,删除掉该记录,输出最终排序后结果。
2.修改并补全demo.cpp代码。
文件
zhang 0.292778
huang 0.020000
xing 269970.744200
lisi 1142826.668000
wangbo 0.138889
lichao 715.458333
zhangta 36579.698890
jiami 12175.304720
tian 1749160.207000
wang5 2.447222
geng 627.357778
yang 1249.143333
wangxue 4879.451389
yuemu 1231745.881000
wangy 0.001111
demo 274168.746100
cui 0.000000
jing 87924.224440
lusu 2346727.028000
xxxx 1.425278
zhangfei 0.166667
wyibo 417411.457500
yangai 2627.677778
cao 0.039444
huangt 52.162222
wbiti11129 17018.470560
lilaoshi 11.533333
wangshi 398.188333
laoshi 43.765556
caojing 626.561667
test3 66.179444
lihua 33894.585560
hongtongtong 0.498056
wruan 3242309.689000
hping_c1 9.558611
demo.cpp
#include <fstream>
#include <string>
#include <cstdlib>
#include <vector>
#include <algorithm>
#include <iterator>
#include <functional>
using namespace std;
//using namespace std::placeholders;struct CoreUser {string user;double cost;
};istream& operator>>(istream& in, CoreUser& core) {in >> core.user >> core.cost;return in;
}struct SortUser {bool operator()(const CoreUser& u1, const CoreUser& u2) {return u1.cost < u2.cost;}
};int main(int argc, char **argv) {//if (argc < 2)return EXIT_FAILURE;ifstream in("total.txt");if (!in)return EXIT_FAILURE;CoreUser u;vector<CoreUser> v;while (in >> u) {v.push_back(u);}// type your code bellow.in.close();
}
思路:
1.筛选:不符合条件的用v.erase(iter)删除
2.排序:demo中提供了SortUser()函数可作为函数对象传入sort中
3.输出:copy函数
#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
#include <vector>
#include <algorithm>
#include <iterator>
#include <functional>
#include <iomanip>
using namespace std;
//using namespace std::placeholders;struct CoreUser {string user;double cost;
};
istream& operator>>(istream& in, CoreUser& core) {in >> core.user >> core.cost;return in;
}bool operator<(const CoreUser &c,const double time){return c.cost<time;
}
ostream& operator<<(ostream& out,const CoreUser &core){cout.setf(ios::left);//设置为左对齐,默认右对齐out<<setw(10)<<core.user<<"\t"<<core.cost;return out;
}struct SortUser {bool operator()(const CoreUser& u1, const CoreUser& u2) {return u1.cost < u2.cost;}
};int main(int argc, char **argv) {//if (argc < 2)return EXIT_FAILURE;ifstream in("total.txt");if (!in)return EXIT_FAILURE;CoreUser u;vector<CoreUser> v;while (in >> u) {v.push_back(u);}// type your code bellow.vector<CoreUser>::iterator it=v.begin();for(;it!=v.end();it++){//u=*it;if(it->cost<24){v.erase(it);it--;}}sort(v.begin(),v.end(),SortUser());copy(v.begin(),v.end(),ostream_iterator<CoreUser>(cout,"\n"));in.close();
}
输出:
laoshi 43.7656
huangt 52.1622
test3 66.1794
wangshi 398.188
caojing 626.562
geng 627.358
lichao 715.458
yang 1249.14
yangai 2627.68
wangxue 4879.45
jiami 12175.3
wbiti11129 17018.5
lihua 33894.6
zhangta 36579.7
jing 87924.2
xing 269971
demo 274169
wyibo 417411
lisi 1.14283e+006
yuemu 1.23175e+006
tian 1.74916e+006
lusu 2.34673e+006
wruan 3.24231e+006
遇到的问题:
1.重载"<<"
ostream& operator<<(ostream& out,CoreUser &core){cout.setf(ios::left);//设置为左对齐,默认右对齐out<<setw(10)<<core.user<<"\t"<<core.cost;return out;
}
erroe:no match for 'operator<<' {operand types are 'std::ostreaem_iterator<CoreUser>::…… {……}' and '……'}
改正:
ostream& operator<<(ostream& out,const CoreUser &core){ }2.输出格式:
#include <iomanip>
cout.setf(ios::left) 设置为左对齐,默认右对齐
setw(n) :设域宽为n3.读取文件ifstream in("total.txt");if (!in)return EXIT_FAILURE;CoreUser u;vector<CoreUser> v;while (in >> u) {v.push_back(u);}
更多推荐
c++练习
发布评论