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());

outf
for(vector tw:b)
在每次迭代中制作一个完整的向量副本。将其更改为
for(const vector
cal()
始终返回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;
}