C++ Primer 习题 10.32

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhao3132453/article/details/85392512

题目就不具体描述了,一下是自己写的例子,可能有问题,仅供参考~

知识点简介:

1、iostream迭代器的简单实用

2、标准库算法的简单实用

3、重载操作符的简单使用

示例代码:

#include <iostream>
#include <vector>
#include <string>
#include <istream>
#include <iterator>
#include <algorithm>
#include <numeric>

using namespace std;

//使用简化的类
class Sales_Data
{
public:
    Sales_Data() {}
    Sales_Data( string s ) : bookNo( s )
    {

    }
    string getBookNo()
    {
        return bookNo;
    }

    friend istream& operator >>( istream &in, Sales_Data &s )
    {
        in >> s.bookNo;
        return in;
    }
    friend string operator+( string s1, Sales_Data &s )
    {
        return s1 + s.bookNo;
    }
    friend ostream& operator<<( ostream& out, Sales_Data &s )
    {
        out << s.bookNo;
        return out;
    }
    friend bool operator ==( const Sales_Data &s1, const Sales_Data &s2 )
    {
        return s1.bookNo == s2.bookNo;
    }
private:
    string bookNo;
};

bool compareIsbn( Sales_Data &s1, Sales_Data &s2 )
{
    return s1.getBookNo() > s2.getBookNo();
}

//by zhaocl
int main()
{
    //使用cin,需要类重载>>操作符
    istream_iterator<Sales_Data> sale_iter( cin ), eof;

    //输入的元素拷贝到vector中
    vector<Sales_Data> sale_vec( sale_iter, eof );

    //排序
    sort( sale_vec.begin(), sale_vec.end(), compareIsbn );

    //求和,需要类重载+操作符
    string s = "biu";
    cout << accumulate( sale_vec.begin(), sale_vec.end(), s ) << endl;

    //使用find,因为要比较所以需要类重载==操作符
    s = "biu005";
    auto iter = find( sale_vec.begin(), sale_vec.end(), s );

    //因为输出,所以类需要重载<<操作符
    if( iter != sale_vec.end() )
    {
        cout << "find:" << *iter << endl;
    }
    else
    {
        cout << "not find " << s << endl;
    }

    system( "pause" );
    return 0;
}

猜你喜欢

转载自blog.csdn.net/zhao3132453/article/details/85392512