如何使用ostream_iterator显示对象的属性

How to display attributes of an object using ostream_iterator.?

本文关键字:对象 属性 显示 iterator 何使用 ostream      更新时间:2023-10-16

>我可以使用set迭代器和std::cout来显示存储在多集中的元素,但对于学习过程,我想通过ostream_iterator来做,看起来我有点无能为力。
这是我所做的和我感兴趣的

我有一个班级说班级学生

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_;
    }
};

我已经将学生类的所有对象按年龄升序存储在多集中。 示例

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<<,因为这是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, " " );