C++ 如何对向量中的行求和?
我有这样一个代码:C++ 如何对向量中的行求和?,c++,vector,stl,C++,Vector,Stl,我有这样一个代码: int cal () { int sum=0; for(vector<vector<float> > tw : b) { int cases=0; float summ=0; for (vector<float> bev : tw) { for (float annual : bev) {
int cal ()
{
int sum=0;
for(vector<vector<float> > tw : b)
{
int cases=0;
float summ=0;
for (vector<float> bev : tw)
{
for (float annual : bev)
{
if (summ>=700)
cases=1;
}
}
sum+=cases;
}
return sum;
}
好吧,这就是结果,但这不好:
Financial statistics of Paris Saint-Germain in last 5 years:
******************************************************************
Expenditure Income
Winter Transfer window 538.45 -189.45
Summer transfer window 105.25 -154.21
________________________________________________________
Expenditure Income
Winter Transfer window 251.45 -102.25
Summer transfer window 506.53 -164.79
________________________________________________________
Expenditure Income
Winter Transfer window 789.14 -189.15
Summer transfer window 763.08 -199.15
________________________________________________________
Expenditure Income
Winter Transfer window 562.51 -152.72
Summer transfer window 429.89 -312.81
________________________________________________________
Expenditure Income
Winter Transfer window 417.45 -164.45
Summer transfer window 364.15 -155.25
________________________________________________________
Expenditure Income
Winter Transfer window -155.25 -155.25
Summer transfer window -155.25 -155.25
________________________________________________________
How many times did the team breach the fair play?: 0
Should the team get banned from UCL?(1=yes, 0=no): 0
所以我不知道如何计算一年中括号内的行数。我的意思是我想计算冬季和夏季转会窗口的总和(以及支出和收入)。
不知何故,我尝试了许多不同的方法,但它需要运算符,我不知道如何编写它。
最后,我不知道程序是如何生成摘要文件的最后一行的。。(我指的是第6行,当时我只给出了5行)
我将感谢您的任何帮助!:D
您可以在下面看到整个程序:
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
struct Income
{
private:
vector<vector<vector<float>>> b;
public:
Income (string filename)
{
ifstream fin(filename.c_str());
if (!fin.is_open())
cerr<<"404 Error";
vector<vector<vector<float>>> years;
float ke;
while(fin.good())
{
vector<vector<float>> tw;
for (int i=0; i<2; i++)
{
vector<float> bev;
for (int j=0; j<2; j++)
{
fin>>ke;
bev.push_back(ke);
}
tw.push_back(bev);
}
years.push_back(tw);
}
fin.close();
b=years;
}
int cal ()
{
int sum=0;
for(vector<vector<float> > tw : b)
{
int cases=0;
float summ=0;
for (vector<float> bev : tw)
{
for (float annual : bev)
{
if (summ>=700)
cases=1;
}
}
sum+=cases;
}
return sum;
}
bool banned()
{
if((100*cal()/b.size())>49.9)
return true;
}
void summary(string filename)
{
ofstream outf(filename.c_str());
outf<<"Financial statistics of Paris Saint-Germain in last 5 years:"<<endl;
outf<<"******************************************************************"<<endl;
for(vector<vector<float> > tw : b)
{
outf<< '\t'<< '\t'<< '\t'<<"Expenditure"<<' '<<"Income"<<endl;
int windows=0;
for (vector<float> bev : tw)
{
if (windows==0)
outf<<"Winter transfer window";
else if (windows==1)
outf<<"summer transfer window";
for (float annual : bev)
{
outf<<'\t'<<annual;
}
outf<<endl;
windows++;
}
outf<<"________________________________________________________";
outf<<endl;
}
outf<<"How many times did the team breach the fair play?: "<<cal()<<endl;
outf<<"Should the team get banned from UCL?(1=yes, 0=no): "<<banned()<<endl;
outf.close();
cout<<"Done! You can check it on summary.txt file"<<endl;
}
};
int main()
{
Income I("stats.txt");
I.summary("summary.txt");
return 0;
}
#包括
#包括
#包括
使用名称空间std;
结构性收入
{
私人:
载体b;
公众:
收入(字符串文件名)
{
ifstream fin(filename.c_str());
如果(!fin.is_open())
cerr49.9)
返回true;
}
无效摘要(字符串文件名)
{
流出流(filename.c_str());
outffor(vector tw:b)
在每次迭代中制作一个完整的向量副本。将其更改为for(const vectorcal()
始终返回0。这是一个精心设计的no-op,它实际上不求和任何东西。观察summ
如何用0初始化,然后从不更新,因此如果(summ>=700)
始终为false,cases
始终为0,函数正忙于将零相加。Re:为什么在输出中有一个额外的行。这是因为您正在读取输入中的一个额外行;请在Income
构造函数末尾检查b.size()
。有关说明,请参阅;while(fin.good())
是检测文件结尾的错误方法。
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
struct Income
{
private:
vector<vector<vector<float>>> b;
public:
Income (string filename)
{
ifstream fin(filename.c_str());
if (!fin.is_open())
cerr<<"404 Error";
vector<vector<vector<float>>> years;
float ke;
while(fin.good())
{
vector<vector<float>> tw;
for (int i=0; i<2; i++)
{
vector<float> bev;
for (int j=0; j<2; j++)
{
fin>>ke;
bev.push_back(ke);
}
tw.push_back(bev);
}
years.push_back(tw);
}
fin.close();
b=years;
}
int cal ()
{
int sum=0;
for(vector<vector<float> > tw : b)
{
int cases=0;
float summ=0;
for (vector<float> bev : tw)
{
for (float annual : bev)
{
if (summ>=700)
cases=1;
}
}
sum+=cases;
}
return sum;
}
bool banned()
{
if((100*cal()/b.size())>49.9)
return true;
}
void summary(string filename)
{
ofstream outf(filename.c_str());
outf<<"Financial statistics of Paris Saint-Germain in last 5 years:"<<endl;
outf<<"******************************************************************"<<endl;
for(vector<vector<float> > tw : b)
{
outf<< '\t'<< '\t'<< '\t'<<"Expenditure"<<' '<<"Income"<<endl;
int windows=0;
for (vector<float> bev : tw)
{
if (windows==0)
outf<<"Winter transfer window";
else if (windows==1)
outf<<"summer transfer window";
for (float annual : bev)
{
outf<<'\t'<<annual;
}
outf<<endl;
windows++;
}
outf<<"________________________________________________________";
outf<<endl;
}
outf<<"How many times did the team breach the fair play?: "<<cal()<<endl;
outf<<"Should the team get banned from UCL?(1=yes, 0=no): "<<banned()<<endl;
outf.close();
cout<<"Done! You can check it on summary.txt file"<<endl;
}
};
int main()
{
Income I("stats.txt");
I.summary("summary.txt");
return 0;
}