c++ - 如何使用 ostream_iterator 显示对象的属性。?

标签 c++ ostream

我可以使用 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/

相关文章:

c++ - 为什么我们得到构建错误 "error C2065: ' ostringstream' : undeclared identifier"& How to fix this?

c++ - ostream<<迭代器,C++

C++ 如何从基本元素的数组/集合调用子运算符<<(ostream)

c++ - 如何在 C++ 中导入所有#include?

c++ - python中的ctype

c++ - ISR 中使用的指针指向寄存器

C++ vector 模板运算符 []

c++ - 如何在 C++ 中将元数据添加到流式 grpc 调用

c++ - 互斥实现可以互换吗(独立于线程实现)

c++ - 四舍五入的值(value)