簡體   English   中英

使用 Vector 結構,不能向其添加 vector.size

[英]Using Vector structure, can't add a vector.size to it

所以基本上我有一個 read() 函數,我想從文件中讀取學生姓名和成績,但是如果我使用 for(auto i = 0; i < 1000; i++) 我有向量大小的問題宣言 ////

void read(vector <Student> A, vector<int> ndgrades)
{

   // IF I CHANGE  A.size() to number, I get error, but here A.size() = 0, hwo do i change it.

    for (auto i = 0; i < A.size(); i++) {
        fin >> A[i].name;
        fin >> A[i].srname;
        int j = 0;
        double vid = 0;
        int grade;
        while (true)
        {
            fin >> grade;
            if (grade == 0) {
                cout << "bad grade" << endl;
                cout << "end of the program" << endl;

            }
            else if (j == 14)break;
            else {
                ndgrades.push_back(grade);
                vid += grade;
                j++;
            }
        }
        double average = vid / j * 1.0;
      //  cout << "Enter egzam result" << endl;
        fin >> A[i].egz;
        A[i].last = average * 0.4 + A[i].egz * 0.6;
        A[i].mediana = (average + A[i].egz) / 2;

        ndgrades.erase(ndgrades.begin(), ndgrades.begin() );
    }

}

這段代碼有很多問題。 首先,您按值傳遞向量Andgrades ,因此在read函數完成后,調用者將無法按預期返回結果。 您應該通過引用傳遞,以便您的函數可以修改調用者中的原始實例,如下所示,類型中帶有&

void read(vector <Student>& A, vector<int>& ndgrades)
{
    //...

其次,您應該讓向量動態增長,而不是嘗試預先分配或手動調整大小。 為此,請創建一個Student實例,然后將其添加到列表中:

    while (true) {
        Student s;
        fin >> s.name;
        fin >> s.srname;
        A.push_back(s);

在最后一部分中,尚不清楚某些代碼試圖實現什么。 如果您想保留每個學生的成績列表,為什么不在 Student 類型本身中有一個向量?

也沒有顯示fin的聲明,但假設它是輸入文件,您可以使用以下命令終止循環:

        if (!fin.good())
            break;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM