链表类型list和forward_list有独有的sort、merge、remove、reverse和unique,而通用版本的是不能用于这两个类型的,因为所要求的迭代器不同,通用版本需要迭代器支持更多的操作。

除了revrese不需要参数,其他都可以传递一个谓词。

splice是链表类型所独有的算法,且没有通用版本。

#include<bits/stdc++.h>
using namespace std;
int main(void) {
list<int>n1{ 1,2,3,4,5,6,7 }, n2{ 11,22,33 };
forward_list<int>n3{ 1,2,3,4,5,6,7 },n4{ 11,22,33 };
auto pi = n1.begin(),pi2=n2.begin(),pi3=n2.end();
auto pj = n3.begin(),pj2=n4.begin(),pj3=n4.end();
n1.splice(pi,n2); //将n2中的元素放到pi之前的位置
n3.splice_after(pj, n4); //将n4中的元素放到pj之后的位置
for (auto i : n1)cout << i << " "; cout << endl;
for (auto i : n3)cout << i << " "; cout << endl;
return 0;
}

输出为

11 22 33 1 2 3 4 5 6 7
1 11 22 33 2 3 4 5 6 7

list和forward_list都有三个版本的splice

n1.splice(pi,n2);		 	//将n2中的元素放到pi之前的位置,此时两个链表可以不同
n1.splice(pi,n2,pi2); //将n2中pi2指向的元素放到pi之前的位置,pi2必须是一个指向n2的有效迭代器,此时两个链表可以相同
n1.splice(pi,n2,pi2,pi3); //将n2中[pi2,pi3)范围中的元素放到pi之前的位置,此时两个链表可以相同,但是pi不能指向范围中的元素 n3.splice_after(pj, n4); //将n4中的元素放到pj之后的位置
n3.splice_after(pj, n4,pj2); //将n4中的pj2指向的元素放到pj之后的位置,pj2必须是一个指向n4的有效迭代器,此时两个链表可以相同
n3.splice_after(pj, n4,pj2,pj3); //将n4中(pj2,pj3)范围中的元素放到pj之前的位置,此时两个链表可以相同,但是pj不能指向范围中的元素

对于上面第二个版本的splice输出如下

11 1 2 3 4 5 6 7
1 22 2 3 4 5 6 7

对于上面第三个版本的splice输出如下

11 22 33 1 2 3 4 5 6 7  //list是[pi2,pi3)
1 22 33 2 3 4 5 6 7 //forward_list是(pj2,pj3)

简记特定容器list和forward_list算法的更多相关文章

  1. 【足迹C++primer】35、特定容器算法

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/cutter_point/article/details/33732681 特定容器算法 lst.me ...

  2. stl中的容器、迭代器和算法----vector中的find实现

    来源 http://blog.csdn.net/huangyimin/article/details/6133650 stl包括容器.迭代器和算法: 容器 用于管理一些相关的数据类型.每种容器都有它的 ...

  3. STL(标准模板库)理论基础,容器,迭代器,算法

    基本概念 STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称.现然主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间.   ...

  4. stl之容器、迭代器、算法几者之间的关系

    转自:https://blog.csdn.net/bobodem/article/details/49386131 stl包括容器.迭代器和算法: 容器 用于管理一些相关的数据类型.每种容器都有它的优 ...

  5. STL理论基础、容器、迭代器、算法

    一.STL基本概念 STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称.现然主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段 ...

  6. STL之序列式容器list与forward_list

    List (双向链表) 与 forwardlist (单向链表) 算是非常基础的数据结构了,这里只是简单介绍下其结构及应用. 以list为例: 其节点模板: template <class T& ...

  7. 带你深入理解STL之迭代器和Traits技法

    在开始讲迭代器之前,先列举几个例子,由浅入深的来理解一下为什么要设计迭代器. //对于int类的求和函数 int sum(int *a , int n) { int sum = 0 ; for (in ...

  8. C++ Primer(第4版)-学习笔记-第2部分:容器和算法

    第9章 顺序容器 顺序容器和关联容器 顺序容器内的元素按其位置存储和访问. 关联容器,其元素按键(key)排序. 顺序容器(sequential container). 顺序容器的元素排列次序与元素值 ...

  9. 基于three.js实现特定Div容器的粒子特效封装

    本文基于three.js实现特定容器的粒子特效效果,支持用户传入特定的dom对象以及粒子颜色. 效果图 移入库 <script src="jquery-1.11.3.min.js&qu ...

随机推荐

  1. 2.nginx配置详细说明

    Nginx配置详解 nginx概述 nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个HTTP服务器进行 ...

  2. Express中间件body-parser

    在http请求种,POST.PUT.PATCH三种请求方法中包含着请求体,也就是所谓的request,在Nodejs原生的http模块中,请求体是要基于流的方式来接受和解析. body-parser是 ...

  3. linux上执行mysql的脚本文件

    我们测试过程中,经常需要执行升级脚本或导入生产测试数据,对于轻量的升级脚本可以直接在客户端工具中打开执行,但是对于文件内容比较大的.sql文件,比如几百M,几G的sql文件,直接拖到客户端工具打开执行 ...

  4. Unix时间戳和Java 的 System.currentTimeMillis()的区别

  5. roslyn\csc.exe

    vs2019调试运行时提示roslyn\csc.exe错误时在nuget包管理器控制台里输入:  Update-Package Microsoft.CodeDom.Providers.DotNetCo ...

  6. 补充[BNDSOJ]小p的数列

    强烈安利gjz的题解,看一遍即可ac:传送门 进入重点: 为啥$to=(dp[i][k][ii]+dp[k+1][j][jj])/2$ 位运算重点:a&b=a+b-a|b 为啥呢? 例子: a ...

  7. Ubuntu终端路径和文件夹相互切换

    一. 环境配置 1. 打开终端输入安装命令 sudo apt-get install nautilus-open-terminal 2. 重新加载文件管理器 nautilus -q 3. 重启电脑 s ...

  8. cmd常用快捷键

    Crtl + Shift +Enter : 以管理员的方式进入命令行模式 ESC: 清楚当前行的内容 Alt + Enter : 全屏/退出全屏 F7 : 通过列表形式查看历史记录 F4 : 快速删除 ...

  9. 有序无序ul->li ol->li菜单,默认点击当前弹出下拉,再次点击收起下拉菜单

    实现这一效果利用css和js技术结合 以ul->li为例子 <!DOCTYPE html><html lang="en"><head> & ...

  10. 异步IO\数据库\队列\缓存\RabbitMQ队列

    本节内容 Gevent协程 Select\Poll\Epoll异步IO与事件驱动 Python连接Mysql数据库操作 RabbitMQ队列 Redis\Memcached缓存 Paramiko SS ...