c++ list 容器splice函数

2023-11-03

list 的splice函数主要是用来合并两个list。
splice是list中特有的拼接方法。splice实现了不需要拷贝的list合并,即可以在常数时间内从list的一个区域拼接到另一个list的一个区域。也就是说splice是一个常数时间的函数(但是也会产生其他形如list的size()问题,导致size()处理时间为O(n)不为常数,见http://blog.csdn.net/russell_tao/article/details/8572000)。

// splicing lists
#include <iostream>
#include <list>

int main ()
{
  std::list<int> mylist1, mylist2;
  std::list<int>::iterator it;

  // set some initial values:
  for (int i=1; i<=4; ++i)
     mylist1.push_back(i);      // mylist1: 1 2 3 4

  for (int i=1; i<=3; ++i)
     mylist2.push_back(i*10);   // mylist2: 10 20 30

  it = mylist1.begin();
  ++it;                         // points to 2

  mylist1.splice (it, mylist2); // mylist1: 1 10 20 30 2 3 4
                                // mylist2 (empty)
                                // "it" still points to 2 (the 5th element)
//此处的it由于是指向的mylist1,splice后,此迭代器依然存在于
//mylist1中,故而不失效,而后面的splice,由于it指向的地址被插入到
//mylist2中,而使迭代器it失效

  mylist2.splice (mylist2.begin(),mylist1, it);
                                // mylist1: 1 10 20 30 3 4
                                // mylist2: 2
                                // "it" is now invalid.
  it = mylist1.begin();
  std::advance(it,3);           // "it" points now to 30

  mylist1.splice ( mylist1.begin(), mylist1, it, mylist1.end());
                                // mylist1: 30 3 4 1 10 20
    //注意此处mylist前后交换了,这可以用作list形如循环移位的操作
  std::cout << "mylist1 contains:";
  for (it=mylist1.begin(); it!=mylist1.end(); ++it)
    std::cout << ' ' << *it;
  std::cout << '\n';

  std::cout << "mylist2 contains:";
  for (it=mylist2.begin(); it!=mylist2.end(); ++it)
    std::cout << ' ' << *it;
  std::cout << '\n';

  return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++ list 容器splice函数 的相关文章

随机推荐

  • ZED2相机SDK安装使用及ROS下使用

    等了快半个月的ZED2相机今天拿到手啦 开始ZED2和VINS之旅吧 本篇博客主要记录ZED2相机SDK 安装过程以及在ROS下的环境搭建 编译使用等 搭建后期开发环境 ZED2相机实图 SDK安装 官网上选择与你的Ubuntu系统和CUD
  • (六) ES6 新特性 —— 迭代器(iterator)

    CSDN话题挑战赛第2期 参赛话题 学习笔记 遍历器 Iterator 就是一种机制 它是一种接口 为各种不同的数据结构提供统一的访问机制 任何数据结构只要部署 Iterator 接口 就可以完成遍历操作 1 ES6 创造了一种新的遍历命令
  • el-radio如何分行排版element-ui,每一项占一行用 display: block;

    原来的组件效果 处理后的效果 使用的代码
  • 苹果天气不显示服务器停止,iphone手机通知栏天气不显示怎么办?解决iphone手机通知栏天气无法正常显示的方法...

    天气变化多端如孩子的脸一样说变就变 前一分钟骄阳似火 不一会就滂沱大雨 所以说天气预报是每一个手机里必不可少的功能 每次出门都习惯留意一下天气 但是关键的时候掉链子 iphone 6s通知栏中的天气预报经常会莫名的消失 让本人很是苦恼 费了
  • LeetCode-1832. 判断句子是否为全字母句【哈希表,位运算】

    LeetCode 1832 判断句子是否为全字母句 哈希表 位运算 题目描述 解题思路一 用数组记录 一次遍历 解题思路二 位运算 最终判断mask是否为26个1即 1 lt lt 26 1 解题思路三 0 题目描述 全字母句 指包含英语字
  • vue项目页面添加水印

    vue项目页面添加水印 使用方法 在根组件中全局引入 watermark set 用户名 页面显示效果如下 方法如下 let watermark let setWatermark str gt let id 1 23452384164 12
  • python_error

    inspection info This inspection detects code which can not be normally reached 检验信息 本次检验检测到正常情况下无法达到的代码 inspection info
  • Spring、SpringMVC、SpringBoot三者的区别

    目录 Spring是什么 SpringMVC是什么 SpringBoot是什么 Spring SpringMVC SpringBoot三者之间的关系 Spring是什么 Spring是一个开源的应用程序框架 它提供了一种简易的开发方式 通过
  • 《MATLAB 神经网络43个案例分析》:第40章 动态神经网络时间序列预测研究——基于MATLAB的NARX实现

    MATLAB 神经网络43个案例分析 第40章 动态神经网络时间序列预测研究 基于MATLAB的NARX实现 1 前言 2 MATLAB 仿真示例 3 小结 1 前言 MATLAB 神经网络43个案例分析 是MATLAB技术论坛 www m
  • 一篇文章读懂少儿机器人编程课程学什么?

    少儿机器人编程课程都学习什么 可以说在少儿成长阶段 孩子想接触的各式各样的主题和对生活的感性认知 通过机器人编程课程都可以学习到 以贝尔机器人编程课程为例 在锻炼孩子们逻辑思维能力的同时 会结合生活观察 启发思考 精细动作等训练 拓展生物
  • 服务器root权限安全策略配置

    服务器root权限安全策略配置 linux系统中 root具有至高无上的权限 为了安全起见 项目生产环境一般会要求禁止root用户直接ssh登录 使用普通用户登录 有特殊需求时 特定组用户可以使用su切换到root用户 或sudo切换到ro
  • 关于wait/notify以及顺序打印

    1 等待和唤醒是同一个对象 2 notify只会唤醒一个线程 使用角度 1 Object wait 会抛出 InterruptedException 2 调用object wait 必须首先对object monitor lock 进行加锁
  • 2020.12.6-参加中国电子学会的青少年软件编程等级考试C语言5级(良好通过)

    Jensen今天参加了中国电子学会的青少年软件编程等级考试C语言的5级考试 目前C语言的5级是最高级别 需要将基本算法都学完的孩子来参加 基本算法包括递推 递归 贪心 分治 搜索 动态规划等 Jensen 两道题AC 其他两道题没有AC 但
  • 机器学习:马尔可夫模型

    后续遇到合适的案例会再补充 1 马尔可夫模型 马尔可夫模型 Markov Model MM 是一种统计模型 广泛应用在自然语言处理等领域中 1 1 数学定义 考虑一组随机变量序列 X X 0
  • Android获取手机联系人的基本信息(如姓名、电话、邮箱、备注)

    在做项目的过程中 需要获取我们手机通讯录联系人的基本信息 如姓名 电话 邮箱 备注 昵称 公司 职位 家庭电话等等信息 下面就是我总结的一些具体方法 1 首先读取联系人需要添加读取权限 6 0以上需要动态获取权限 1 1AndroidMan
  • go context用法详解

    转发自 作者kingeasternsun https studygolang com articles 10155 fr sidebar 本文主要基于官方文档Go Concurrency Patterns Context以及视频Advanc
  • SpringBoot+Vue校园学习成绩管理系统

    简介 本项目采用了基本的springboot vue设计的校园学习成绩管理系统 详情请看截图 经测试 本项目正常运行 本项目适用于Java毕业设计 课程设计学习参考等用途 项目描述 项目名称 SpringBoot Vue校园学习成绩管理系统
  • Hyperledger Fabric 带入门 Python 课程

    Hyperledger Fabric 带入门 Python 课程 Hyperledger Fabric 是一个开源的区块链框架 被广泛应用于企业级联盟链场景 Python 是一种高级编程语言 易于学习和使用 是区块链领域的热门语言之一 本文
  • 数字表达_金字塔神秘数字之谜!142857这组神奇的数字表达着什么含义

    在埃及金字塔内 发现一组看似平凡 但很神奇的数字 142857 这组数字背后隐藏着人类无法解释的谜团 有人说这组数字和汶川大地震的时间偶合 这组数字隐藏了灾难发生的预言之秘 这到底是有心人无端的揣测 还是严谨的科学推论 142857这组数字
  • c++ list 容器splice函数

    list 的splice函数主要是用来合并两个list splice是list中特有的拼接方法 splice实现了不需要拷贝的list合并 即可以在常数时间内从list的一个区域拼接到另一个list的一个区域 也就是说splice是一个常数