链表类型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. if you wanna the rainbow, you have to deal with the rain.

    bulk. n. 大量 reluctant. adj. 不情愿的 terrorist. n. 恐怖分子 recognition. n. 认出 tout.v. 兜售 conceal.v. 隐藏 dras ...

  2. python之optparse

    Python有两个内建的模块用来处理命令行参数 一个是getopt只能简单处理命令行参数 一个是optparse,功能更强大,而且易于使用,可以方便地生成标准的,符合Unix/Posix规范的命令行说 ...

  3. 【Qt笔记】QAction与QToolButton的关联

    QAction可以理解为一个动作数据,包含了这个同坐相关的图标.文本.是否可用等数据和状态,以及连接对应的槽函数,用于执行这个动作. QToolButton则可以使用QAction对象作为后端,显示这 ...

  4. PyCharm控制台python shell 和 IPython shell的切换

    1. IPython介绍 IPython 是一个 python 的交互式 shell,比默认的python shell 好用得多,支持变量自动补全,自动缩进,支持 bash shell 命令,内置了许 ...

  5. Node.js+webSocket

    // 引入WebSocket模块 var ws = require('nodejs-websocket') var PORT = 3030 var server = ws.createServer(f ...

  6. 如何使用js在移动端和PC端居中

    在手机移动端和PC端控制居中是一个很蛋痛的问题,因为屏幕宽度在变化,所以就不要写死样式,那么我想用JS来控制,灵活的控制宽度,需要注意这三个时候: (1)首先需要在页面刚加载的时候就调用此函数, (2 ...

  7. django报错处理:对应ip无法登陆与使用bootstrap移动端响应工具,head响应实例

    1.报错 Invalid HTTP_HOST header: '192.168.1.100:8000'. You may need to add '192.168.1.100' to ALLOWED_ ...

  8. C#设计模式:解释器模式(Interpreter Pattern)

    一,C#设计模式:解释器模式(Interpreter Pattern) 1,解释器模式的应用场合是Interpreter模式应用中的难点,只有满足“业务规则频繁变化,且类似的模式不断重复出现,并且容易 ...

  9. SPA(单页面应用)和MPA(多页面应用)

    话不多说,直接看图,一目了然

  10. C# List<Object>值拷贝

    using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Run ...