我可以使用 set
迭代器和 std::cout
来显示存储在多集中的元素,但对于学习过程我想通过 来完成ostream_iterator
看起来我有点无能为力。
这是我所做的和我感兴趣的事情
我有一个类(class)学生
class Student
{
private :
int age_;
std::string name_;
double marks_;
public :
Student();
Student(int age, string name, double marks):
age_( age ),
name_( name ),
marks_( marks)
{
}
int get_age() const
{
return age_;
}
std::string get_name() const
{
return name_;
}
double get_marks() const
{
return marks_;
}
};
我已经按照年龄的升序将 Student 类的所有对象存储在 multi-set 中。例子
class Compare
{
public:
bool operator ()(Student s1, Student s2)
{
return ( s1.getage() < s2.getage() );
}
};
// ... then somewhere ...
std::multiset<Student, Compare > student_set;
Student A21( 21, " AVi", 49.5 );
Student A17( 17, " BLA", 67.0 );
Student A57( 57, " BLC", 41.0 );
bla bla bla .....
bla bla bla.....
student_set.insert( A21 );
student_set.insert( A17 );
bla bla bla .....
bla bla bla.....
现在我想使用 ostream_iterator
显示所有内容
这样我就会得到
student.get_name() << student.get_age() << student.get_marks();
// no idea what to do here ??
std::ostream_iterator< ???? >output( std::cout, " " );
std::copy( student_set.begin(), student_set.end(), output );
最佳答案
你需要重载 operator<<
对于你的类(class),因为这就是ostream_iterator
分配给时调用。
像这样:
std::ostream& operator<<(std::ostream& os, const Student& s)
{
return os << get_name() << get_age() << get_marks(); // needs some formatting
}
然后用 Student
构造迭代器作为模板参数:
std::ostream_iterator<Student> output( std::cout, " " );
关于c++ - 如何使用 ostream_iterator 显示对象的属性。?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23243475/