用迭代器求解c2100
Solution to c2100 with iterator?
我的程序出现了错误:
// 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++编程的入门书。这段代码充满了错误。你不知道如何使用指针/引用/迭代器
- 从一本好书中学习复制、参考和指针。点击答案末尾的链接。
- 变量应该限制在使用它们的范围内。当你的函数不需要参数的时候,不要再给它传递那么多参数了。
- 同时使用间接和解引用操作符,当您只需要一个操作符用于您应用操作符的类型时。
- 每次循环增加数组索引两次,这会使它超出边界。
- 你正在使用容器的
end()
成员函数,并假设它返回容器中最后一个元素的迭代器。 - 您想要打印最低和最高等级,但要循环整个容器。
为了你的缘故,我已经修正了最明显的错误:
#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++图书指南和列表
相关文章:
- 使用std::multimap迭代器创建std::list
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- C++中带有List类的迭代器Segfault
- 如何在c++迭代器类型中包装std::chrono
- 集合上的输出迭代器:assign和increment迭代器
- Boost Spirit,获取迭代器内部语义动作
- 对于set上的循环-获取next元素迭代器
- 为什么output_editor Concept不需要output_e迭代器标记
- c++17文件系统::recursive_directory迭代器()在mac上没有给出这样的目录,但在windows上
- 使用迭代器时如何访问对象在向量中的位置?
- std::vector::迭代器是否可以合法地作为指针
- 跟随整数索引列表的自定义类迭代器
- 不明白迭代器,引用和指针失效,一个例子
- 我可以使用反向迭代器作为ForwardIt吗
- ESP8266单片机矢量迭代器的C++问题
- 如何在C++中将迭代器作为函数参数传递
- 是否应避免从非常量迭代器转换为常量迭代器?
- 如何在 c++ 中将字符串迭代器变量传递给函数?
- 为什么 vector 的随机访问迭代器给出与指针不同的内存地址?
- 用迭代器求解c2100