目录

  • emplace_front()
  • splice()
    • 作者的坑
    • 时间复杂度
    • 注意点:
    • 疑惑处

emplace_front()

  emplace中文为安置,那么这个函数就是安置到什么什么前面。

void emplace_front(value_type val) ;


  时间复杂度:O(1)

splice()

  splice译为粘接,作用就是用来粘接的。list::splice实现list拼接的功能。将源list的内容部分或全部元素删除,拼插入到目的list。
函数有以下三种声明:

1.void splice ( iterator position, list<T,Allocator>& x );
2.void splice ( iterator position, list<T,Allocator>& x, iterator it );
3.void splice ( iterator position, list<T,Allocator>& x, iterator first, iterator last );

参数:

  • position:目的list的位置,用来标明插入位置;
  • x:源list、
  • first,last:x里需要被移动的元素的迭代器,区间为[first, last).

三种作用:

  • 1.将x的元素移动到目的list的指定位置,高效的将他们插入到目的list并从x中删除。
  • 2.目的list的大小会增加,增加的大小为插入元素的大小。x的大小相应的会减少同样的大小。
  • 3.把first 到 last 剪接到要操作的list对象中。

作者的坑

  list的size()方法的时间复杂度为o(n)。
  作者是为了splice(iterator position, list& x, iterator first, iterator last);的实现把size方法设计成了O(N)。splice方法就是为了把链表A中的一些元素直接串联到链表B中,如果size()设计为O(1)复杂度,那么做splice时就需要遍历first和last间的长度(然后把链表A保存的链表长度减去first和last(待移动的元素)之间的长度)!于是作者考虑到size方法设计为O(N),就无需在splice方法执行时做遍历了!

时间复杂度

  上面都做出这种贡献了,为的就是完成list 的 splice 时间复杂度为 O(1)。

注意点:

指向被删除元素的迭代器会失效,就会报错。
list.size()内部实现为遍历,时间复杂度为o(n)不是o(1).

疑惑处

  搜到的大部分资料说前两个函数不会涉及到元素的创建或销毁,第三个函数会。对此不甚解,望读者知晓后在评论区评论一下,不胜感激。

list容器下的 emplace_front() splice() 函数相关推荐

  1. linux网络编程九:splice函数,高效的零拷贝

    1. splice函数 #include <fcntl.h>     ssize_t splice(int fd_in, loff_t *off_in, int fd_out, loff_ ...

  2. linux网络编程:splice函数和tee( )函数高效的零拷贝

    splice( )函数 在两个文件描述符之间移动数据,同sendfile( )函数一样,也是零拷贝.  函数原型: #include <fcntl.h> ssize_t splice(in ...

  3. Linux下的内存对齐函数

    在Linux下内存对齐的函数包括posix_memalign, aligned_alloc, memalign, valloc, pvalloc,其各个函数的声明如下: int posix_memal ...

  4. Linux中assert头文件,linux系统下如何使用assert函数

    linux系统下如何使用assert函数 只要看得懂程序的人都知道assert,在Windows下使用VC编写,使用assert之后,只需在IDE中设置为debug版或者是release版,编译器就会 ...

  5. C++11新特性-容器的cbegin和cend函数

    该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/105022922 容 ...

  6. linux uname内核,Linux下confstr与uname函数_获取C库与内核信息

    Linux下confstr与uname函数_获取C库与内核信息 #include #include  //uname int main(int argc, char **argv[]) { struc ...

  7. 12、oracle数据库下的存储过程和函数

    ORACLE下的存储过程和函数 存储过程和函数是一种操作块,用来流程化.整体化处理业务逻辑的数据库操作方式.我理解的是相当于java开发语言中方法的概念,存储过程和函数的区别在于函数可以有返回值,而过 ...

  8. [css] 写出固定子容器在固定的父容器下水平垂直居中的布局

    [css] 写出固定子容器在固定的父容器下水平垂直居中的布 1.父容器 position: relative,子元素 position: absolute;left: 50%;top: 50%;tra ...

  9. Linux系统常用函数,浅谈linux下的一些常用函数的总结(必看篇)

    1.exit()函数 exit(int n)  其实就是直接退出程序, 因为默认的标准程序入口为int main(int argc, char** argv),返回值是int型的. 一般在shell下 ...

最新文章

  1. 教育部免费开放的2.4万门网课,都在这里!
  2. 9种没结果的爱(未婚者必读)!!!
  3. simulink中from与goto模块的使用
  4. 搞懂分布式技术8:负载均衡原理剖析
  5. loadrunner脚本设计:事务函数的使用
  6. java B2B2C Springcloud多租户电子商城系统-Spring Cloud Sleuth
  7. 【Mybatis-Plus】(一)初识Mybatis-Plus 入门案例
  8. 5日直播预告丨Oracle DBA的SQL编写技能提升宝典
  9. 1.2 线性回归的keras实现
  10. 『科学计算_理论』矩阵求导
  11. Tensorflow Day1
  12. 支付宝手机网站支付,错误代码 insufficient-isv-permissions 错误原因: ISV权限不足
  13. Ubuntu磁盘分区和挂载
  14. 计算机温度压力测试,整机性能与温度压力测试
  15. 追寻ARM的起源-Acorn电脑简史及FPGA实现
  16. 使用css动画实现loding效果
  17. 泰山OFFICE技术讲座:标点关系穷举研究-07
  18. 【微信小程序-原生开发】实用教程20 - 生成海报(实战范例为生成活动海报,内含生成指定页面的小程序二维码,保存图片到手机,canvas 系列教程)
  19. Qt去除libpng warning: iCCP: known incorrect sRGB profile
  20. Keil中添加对CX32L003系列芯片的支持

热门文章

  1. mysql赋予用户权限
  2. 闲鱼如何保障交易链路质量
  3. [ZZ]:Google 发现的十大真理
  4. mbp2015 款发热主因
  5. 源生之能--to Rain
  6. FTP上传或下载偶尔出现文件为空
  7. 华为算法工程师面试经历汇总
  8. loadrunner入门教程(28) --场景运行
  9. 软件构造——浅谈正则表达式
  10. brk系统调用和copy-on-write机制