C++ 如何从C+;中的一组对象指针打印+;?
我有一个班级的学生,我存储在我的cpp文件设置。我遇到的问题是打印出实际的学生对象。我已经尝试了所有我能想到的,我得到的不是指针的地址就是编译错误。在我的学生课上,我有一个叫做display的方法,它以我想要的格式打印出所有信息 这是我到目前为止所拥有的 .cpp文件C++ 如何从C+;中的一组对象指针打印+;?,c++,class,pointers,set,C++,Class,Pointers,Set,我有一个班级的学生,我存储在我的cpp文件设置。我遇到的问题是打印出实际的学生对象。我已经尝试了所有我能想到的,我得到的不是指针的地址就是编译错误。在我的学生课上,我有一个叫做display的方法,它以我想要的格式打印出所有信息 这是我到目前为止所拥有的 .cpp文件 #include "Name.h" #include "Student.h" #include<iostream> #include<string> #include<set> using na
#include "Name.h"
#include "Student.h"
#include<iostream>
#include<string>
#include<set>
using namespace std;
int main()
{
Student s1;
set<Student *> s;
while(cin>>s1)
{
s.insert(new Student(s1));
}
for(set<Student *>::const_iterator it = s.begin(); it != s.end(); ++it)
{
&(*it).display(cout);
}
}
文件是这样组织的。首先是学生的id,然后是他们的名字,然后是他们修过的课程数量,然后是课程数量加上他们在该课程中获得的分数
我的问题是如何打印实际的学生对象?在
for
循环中:
for(set<Student *>::const_iterator it = s.begin(); it != s.end(); ++it)
{
&(*it).display(cout);
}
在
for
循环中:
for(set<Student *>::const_iterator it = s.begin(); it != s.end(); ++it)
{
&(*it).display(cout);
}
迭代器的行为类似于指向实际集合元素的指针,因此取消对迭代器的引用将为您提供集合元素。该元素本身就是指向
Student
对象的指针。因此,您需要取消引用两次:
(**it).display(cout);
哪一个写得更好:
(*it)->display(cout);
更好的方法是,以与code>类似的方式重载
运算符,您可以编写:
cout << (**it);
cout迭代器的行为类似于指向实际set元素的指针,因此取消对迭代器的引用将为您提供set元素。该元素本身就是指向Student
对象的指针。因此,您需要取消引用两次:
(**it).display(cout);
哪一个写得更好:
(*it)->display(cout);
更好的方法是,以与code>
类似的方式重载
运算符,您可以编写:
cout << (**it);
cout
使用它:
#include <set>
#include <algorithm>
#include <iterator>
int main()
{
std::set<Student> students;
students.insert(Student("Alan"));
students.insert(Student("Rudy"));
std::copy(students.begin(), students.end(),
std::ostream_iterator<Student>(std::cout, ", "));
return 0;
}
使用它:
#include <set>
#include <algorithm>
#include <iterator>
int main()
{
std::set<Student> students;
students.insert(Student("Alan"));
students.insert(Student("Rudy"));
std::copy(students.begin(), students.end(),
std::ostream_iterator<Student>(std::cout, ", "));
return 0;
}
请注意,您的代码会泄漏内存。每当您发现自己在使用指针或new
,您都应该非常非常担心,并确保您了解为什么要这样做以及为什么做得不好。您的权利,我忘了我需要释放内存。你能存储Student
s而不是Student
s的指针吗?然后,您可以使用std::ostream\u迭代器(std::cout)
打印它们。请注意,您的代码会泄漏内存。每当您发现自己在使用指针或new
,您应该非常非常担心,并三倍确保您理解为什么要这样做以及为什么没有做得更好。您的权利,我忘了我需要释放内存。你能存储Student
s而不是Student
s的指针吗?然后您可以使用std::ostream\u迭代器(std::cout)
将它们全部打印出来
#include <set>
#include <algorithm>
#include <iterator>
int main()
{
std::set<Student> students;
students.insert(Student("Alan"));
students.insert(Student("Rudy"));
std::copy(students.begin(), students.end(),
std::ostream_iterator<Student>(std::cout, ", "));
return 0;
}
Alan, Rudy,