用迭代器求解c2100

Solution to c2100 with iterator?

本文关键字:c2100 迭代器      更新时间:2023-10-16

我的程序出现了错误:

// ConsoleApplication42.cpp : Defines the entry point for the console application.
//
    #include "stdafx.h"
    #include <iostream>
    #include <list>
    #include <cstdlib>
    #include <time.h>
    #include <algorithm>
    #include <string>
    #include <vector>
    using namespace std;

    const int numberOfStudents = 9;
    string names[numberOfStudents] = {"Abe","Billy","Carl","Dillan","Eddie","Felix","Gill","Herald","Isaac"};
    struct StudentInfo {
        string name;
        int grade;

        bool operator< (int grade){
            return grade < grade;
        }
        bool operator< (string name){
            return name < name;
        }
        };

    void populateStudentRecords(vector<StudentInfo>Students,vector<int>::iterator iter, int x){
        for(auto iter = Students.begin(); iter != Students.end(); ++iter){
            iter->name = names[x];
            iter->name.push_back(x);
            iter->grade = x++;
            x = x++;
        }

    }
    bool sortByName(const StudentInfo x, const StudentInfo y){
        return x.name < y.name;
    }
    bool sortByGrade(const StudentInfo x, const StudentInfo y){
        return x.grade < y.grade;
    }
    void displayRecords(vector<StudentInfo>Records,vector<int>::iterator iter){
        for(auto iter = Records.begin(); iter != Records.end(); ++iter){
            cout<<*iter->name<<" -"<<*iter->grade<<endl;
        }
    }
    void displayMaxAndMinGrade(vector<StudentInfo>Records,vector<int>::iterator iter){
        for(auto iter = Records.begin(); iter != Records.end(); ++iter){
            cout<<*iter->name<<" - " <<*iter->grade<<endl;
            iter = Records.end();
            cout<<*iter->name<<" - " <<*iter->grade<<endl;
        }
    }
    int _tmain(int argc, _TCHAR* argv[])
    {
        vector<StudentInfo>Records (numberOfStudents);
        vector<int>::iterator iter;

        populateStudentRecords(Records,iter,0);
        sort(Records.begin(),Records.end(),sortByName);
        displayRecords(Records,iter);
        sort(Records.begin(),Records.end(),sortByGrade);
        cout<<" "<<endl;
        displayMaxAndMinGrade(Records, iter);
        return 0;
    }

在displayRecords函数和displayMaxAndMin函数中,迭代器旁边有一个*符号。我想让计算机显示这些变量的值在每次出现的结构在向量中。然而,当我试图构建程序时,我得到一个错误c2100。我试着在不包含*符号的情况下运行程序,但这会显示每个变量的地址,也会导致崩溃。我该如何解决这个问题?谢谢你。

你需要读一本关于c++编程的入门书。这段代码充满了错误。你不知道如何使用指针/引用/迭代器

  1. 从一本好书中学习复制、参考和指针。点击答案末尾的链接。
  2. 变量应该限制在使用它们的范围内。当你的函数不需要参数的时候,不要再给它传递那么多参数了。
  3. 同时使用间接和解引用操作符,当您只需要一个操作符用于您应用操作符的类型时。
  4. 每次循环增加数组索引两次,这会使它超出边界。
  5. 你正在使用容器的end()成员函数,并假设它返回容器中最后一个元素的迭代器。
  6. 您想要打印最低和最高等级,但要循环整个容器。

为了你的缘故,我已经修正了最明显的错误:

#include <iostream>
#include <list>
#include <cstdlib>
#include <time.h>
#include <algorithm>
#include <string>
#include <vector>
using namespace std;
const int numberOfStudents = 9;
string names[numberOfStudents] = { "Billy", "Abe","Carl","Dillan","Eddie","Felix","Gill","Herald","Isaac" };
struct StudentInfo
{
    string name;
    int grade;
};
void populateStudentRecords(vector<StudentInfo>& Students)
{
    int x{ 0 };
    for (auto iter = Students.begin(); iter != Students.end(); ++iter)
    {
        iter->name = names[x];
        iter->name.push_back(x);
        iter->grade = ++x;
    }
}
bool sortByName(const StudentInfo x, const StudentInfo y)
{
    return x.name < y.name;
}
bool sortByGrade(const StudentInfo x, const StudentInfo y)
{
    return x.grade < y.grade;
}
void displayRecords(vector<StudentInfo>Records)
{
    for (auto iter = Records.begin(); iter != Records.end(); ++iter)
    {
        cout << iter->name << " -" << iter->grade << endl;
    }
}
void displayMaxAndMinGrade(vector<StudentInfo>Records)
{
    auto iter = Records.begin();
    cout << iter->name << " - " << iter->grade << endl;
    iter = Records.end() - 1;
    cout << iter->name << " - " << iter->grade << endl;
}
int main()
{
    vector<StudentInfo>Records(numberOfStudents);
    populateStudentRecords(Records);
    sort(Records.begin(), Records.end(), sortByName);
    displayRecords(Records);
    sort(Records.begin(), Records.end(), sortByGrade);
    cout << " " << endl;
    displayMaxAndMinGrade(Records);
    return 0;
}

请访问以下链接:

c++图书指南和列表