c++ primer第五版(中文)习题答案 第十章第六节-特定容器算法

本博客知识记录自己学习中的笔记或者记录,如果有错误欢迎大家纠正。
本节主要学习特定的容器链表类型list和forward_list定义的几个算法
他们定义了特定的sort,merge,remove,reverse和unique.通用版的sort要求随机访问迭代器,因此不能用于list和forward_list,因为这两个类型分别提供双向迭代器和前向迭代器。链表通过改变元素间的链接而不是真的交换他们的值来快速交换元素
对于list和forward_list应该优先使用特定算法而不是通用算法

lst.merge(lst2)
lst.merge(lst2,comp) 将来自lst2中的元素合并入lst,lst和lst2必须是有序的。元素将从lst2中删除,在合并之后,lst变为空,第一个版本使用<运算符,第二个使用comp给定的

lst.remove(val)
lst.remove_if(pred) 调用erase删除前者调用==运算符 或令一元谓词为真的每个元素。

lst.reverse 反转lst链表元素的顺序

lst.sort()
lst.sort(comp) 前者使用<运算符 后着调用使comp为真的条件

lst.unique()
lst.unique(pred) 调用erase删除同一个值的连续拷贝,前者使用==运算符,后者使用一元谓词

lst.splice(args) 或flst.splice_after(arge)
(p,lst2) //p是一个指向lst中元素的迭代器,或一个指向flst首前位置的迭代器。函数将lst2的所有元素移动到lst中p之前的位置或flst中p之后的位置,将元素重lst2中删除。lst2的类型必须和lst或flst相同,且不能是同一个链表。

(p,lst2,p2) //p2是一个指向lst2中位置的有效的得带钱。将p2指向的元素移动到lst中,或将p2之后的元素移动到flst中,lst2可以是与lst或flst相同的链表。
(p,lst2,b,e) //b和e必须表示lst2的合法范围,将给定范围中的元素从lst2移动到lst或flst。lst2与lst(flst)可以是相同的链表,但p不能指向给定范围中的元素。

链表特有的操作会改变容器。

习题解答。
10.42 使用list代替vector重新实现10.2.3节 中去除重复单词的程序

#include <vector>
#include <list>
#include <string>
#include "stdlib.h"
#include <iostream>
#include <iterator>
#include <algorithm>
void pritef(std::list<std::string> &word)
{
    for (auto s : word)
        std::cout << s << " ";
    std::cout << std::endl;
}
void elimDups(std::list<std::string> &word)
{
    //排序
    word.sort();
    std::cout << "sort: ";
    pritef(word);

    word.unique();
    std::cout << "unique: ";
    pritef(word);
}

int main()
{
    std::list<std::string>listStr;
    std::string s = "";
    while (std::cin >> s)
        listStr.push_back(s);
    elimDups(listStr);

    system("pause");
    return 0;
}

输出结果如下
这里写图片描述

本章结束,下次从第一章开始做起,跳着看,有些前面讲到的算法,在后面也不是太清楚,加油 ILVOELQ

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值