C++ Primer(第五版) 第十章练习答案

C++ Primer(第五版) 第十章练习答案

10.1

#include <vector>
#include <iostream>
#include <algorithm>

using namespace std;

int main()
{
   
    vector<int> vec;
    int i;

    while (cin >> i)
        vec.emplace_back(i);

    cin.clear(cin.rdstate() & ~cin.failbit & ~cin.badbit);

    while (getchar() != '\n');

    cin >> i;

    cout << count(vec.begin(), vec.end(), i) << endl;

    return 0;
}

10.2

#include <iostream>
#include <string>
#include <list>
#include <algorithm>

using namespace std;

int main()
{
   
    list<string> lst;
    string s;

    while (cin >> s)
        lst.emplace_back(s);

    cin.clear(cin.rdstate() & ~cin.failbit & ~cin.badbit);

    while (getchar() != '\n');

    cin >> s;

    cout << count(lst.begin(), lst.end(), s) << endl;

    return 0;
}

10.3

#include <algorithm>
#include <vector>
#include <iostream>
#include <numeric>

using namespace std;

int main()
{
   
    vector<int> vec(3, 10);

    auto sum = accumulate(vec.cbegin(), vec.cend(), 0);
    
    cout << sum << endl;

    return 0;
}

10.4


/**
 * double 转换成 int
 */

10.5


/**
 * 无法比较
 * 没有 == 运算符
 * 报错
 */

10.6

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

using namespace std;

int main()
{
   
    vector<int> vec;

    fill_n(back_inserter(vec), 10, 0);

    for (auto &i : vec)
        cout << i << ends;
    cout << endl;

    return 0;
}

10.7



/**
 * a
 * copy(lst.cbegin(), lst.cend(), back_inserter(vec));
 * 
 * b
 * fill_n(back_inserter(vec), 10, 0);
 */

10.8



/**
 * 对 back_inserter 赋值时 右边的值被添加到容器中
 * 迭代器赋的值关我算法什么事
 */

10.9

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

using namespace std;

void elimDups(vector<string> &vec);

int main()
{
   
    vector<string> vec;
    string str;

    while (cin >> str)
        vec.emplace(vec.end(), str);

    elimDups(vec);
    
    for (auto &i : vec)
        cout << i << ends;
    cout << endl;


    return 0;
}

void elimDups(vector<string> &vec)
{
   
    sort(vec.begin(), vec.end());
    vec.erase(unique(vec.begin(), vec.end()), vec.end());
}

10.10



/**
 * 迭代器没有这操作
 */

10.11

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

using namespace std;

typedef bool(*is)(const string&, const string&);
typedef void(*st_sort)(vector<string>::iterator, vector<string>::iterator, is);

bool isShorter(const string &s1, const string &s2);
void elimDups(vector<string> &vec, st_sort, is);

int main()
{
   
    vector<string> vec;
    string str;

    while (cin >> str)
        vec.emplace(vec.end(), str);

    elimDups(vec, stable_sort, isShorter);

    for (auto &i : vec)
        cout << i << ends;
    cout << endl;

    return 0;
}

void elimDups(vector<string> &vec, st_sort u, is i)
{
   
    // 按字典排序
    sort(vec.begin(), vec.end());
    // 删除相同元素
    vec.erase(unique(vec.begin(), vec.end()), vec.end());
    // 按长度重排, 长度相同维持字典序
    u(vec.begin(), vec.end(), i);
}

bool isShorter(const string &s1, const string &s2)
{
   
    return s1.size() < s2.size();
}

10.12

#include <algorithm>
#include <vector>
#include <iostream>
#include <numeric>
#include <string>
#include "../Sales_data/Sales_data.h"
// #include "../Sales_data/Sales_data.cc"

using namespace std;

bool compareIsbn(const Sales_data &s1, const Sales_data &s2);

int main()
{
   
    vector<Sales_data> vec;
    Sales_data sa;
    while (read(cin, sa))
    {
   
        vec.push_back(sa);
    }

    sort(vec.begin(), vec.end(), compareIsbn);

    for (auto &i : vec)
        print(cout, i) << endl;

    return 0;
}

bool compareIsbn(const Sales_data &s1, const Sales_data &s2)
{
   
    return s1.isbn() < s2.isbn();
}

10.13

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

using namespace std;

bool is(const string &s);

int main()
{
   
    vector<string> vec;
    string str;
    while (cin >> str)
        vec.emplace_back(str);

    auto par_end = partition(vec.begin(), vec
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值