链表类型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. Web Service自动化测试知识点导图

  2. PHP 对Memcache的使用实例

    <?php //连接Memcache$mem = new Memcache;$mem->connect("localhost", 11211) or die (&quo ...

  3. 【HBase】二、HBase实现原理及系统架构

      整个Hadoop生态中大量使用了master-slave的主从式架构,如同HDFS中的namenode和datanode,MapReduce中的JobTracker和TaskTracker,YAR ...

  4. face-api.js 前端人脸识别,人脸检测,登录认证

    1.参考face-api.js https://github.com/justadudewhohacks/face-api.js#face-api.js-for-the-browser

  5. Springboot2.x集成Redis哨兵模式

    Springboot2.x集成Redis哨兵模式 说明 Redis哨兵模式是Redis高可用方案的一种实现方式,通过哨兵来自动实现故障转移,从而保证高可用. 准备条件 pom.xml中引入相关jar ...

  6. git学习指南

    近来学习Git,苦寻资料下发现廖雪峰老师的教程很好,在此推荐传送门 附每节总结,方便查阅 创建版本库 初始化一个Git仓库,使用git init命令. 添加文件到Git仓库,分两步: 使用命令git ...

  7. 事件流程以及dom2级事件绑定

    事件流程分为三个阶段:捕获阶段.目标阶段.冒泡阶段. 捕获阶段:事件从最顶层元素开始执行,一层层往下,直到精确元素. 目标阶段:事件在精确元素上执行. 冒泡阶段:事件从精确元素开始执行,一层层往上,直 ...

  8. js随机验证码

    随机验证码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <ti ...

  9. Hive内部表,外部表和分区表

    外部表和内部表的区别 内部表也称之为managed_table: 默认存储在/user/hive/warehouse下,也可以通过location指定: 删除表事,会删除表数据以及元数据: 外部表称之 ...

  10. InisghtFace 制作自定义数据集和模型训练评估

    前言 本文以lfw数据集进行示例 lfw结果集下载地址:http://vis-www.cs.umass.edu/lfw/lfw.tgz insightface源码下载地址:https://github ...