文章标题
来源:互联网 发布:c语言switch case语句 编辑:程序博客网 时间:2024/06/06 18:49
list,stl中的基本容器链表,具体来说是环形双向链表。
实现
节点
作为链表,先看其重要的基本元素-节点。 一个节点node构成如下:
- prev:前置节点
- next:后置节点
- data : 数据
迭代器
迭代器内部需要一指针(list_type *node)指向对应节点,并且能够实现一些迭代器的基本操作。
- ++
self& operator++(){ // ++iter; node = node->next; return *this;} self& operator++(){ // iter++; self tmp = *this; ++*this; return tmp;}
- ->
- *
self & opearator *()const{ return node->data;}
迭代器基本操作通过节点指针node来实现。
list
对于链表而言,只需要一个节点指针pNode即可实现双向环形链表。该节点指针指向尾部空白节点。
对于链表的相关操作,一个个来分析
begin : pNode->next
end : pNode
empty : pNode->next == pNode
size : distance(begin(), end(), result
front : *begin(),用到了迭代器的*操作
- back : *end(),同上
接下来考虑push,pop,insert,erase等操作
insert
注:stl所有insert操作都是插入在当前位置之前
insert(iterator pos, const T &x); 在pos位置前 插入元素x,涉及新旧节点的next和prev指针更换等,不做具体分析,内部也很简单。
这里注意: 该函数返回的是新节点的迭代器,并且pos位置的迭代器不改变。push_back
调用insert操作 insert(end(),x)push_front
调用insert操作 insert(begin(),x)erase
删除某个节点,注意函数返回的是被删除节点pos的下一个节点的迭代器pop_front
- pop_back
clear
remove
remove(const T &x) 移除所有元素值为xunique
移除连续而相同的元素, eg: unique前后
1,2,2,2,1,3,3,4,1
1,2,1,3,4,1transfer (内部操作)
属于内部操作-迁移,transfer(positon,first,last)将[first,last)内所有元素一道postion之前,进行一系列的节点next和prev的更换操作(3条连接6行操作)。 为后续merge,sort等操作提供基础。
注意:position所在的链表可以和[first,last)所在的链表属于同一个,也可以属于不同的。
当属于同一个时,position不能处于[first,last)区间内。splice
splice(iterator pos,list &x);
splice(iterator pos, list &, iterator first, iterator last);
对外接口,内部调用transfer操作。sort
list只能使用自己的函数sort进行排序,从小到大,不能使用stl算法的sort函数进行排序。
当list元素为类或者结构体等非基本数据类型时,需要对>,<等做重载。具体在排序一节中分析。
reverse
对链表进行反转,如升序变降序可用该操作。merge
链表合并操作,merge(x) 将链表x合并到this上。
- 文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题 文章标题 文章标题 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 移动端开发通用坑以解决方案
- Git几个好用的进阶命令
- windows Linux创建 多个python虚拟环境
- Java 日期验证 正则判断
- 服务器 apache配置https,http强制跳转https
- 文章标题
- Mac安装sci-image报错
- python 的logging ,os模块, command模块 , sys模块
- 在线源码管理svn git
- dubbo-admin 在linux 、jdk8 、tomcat7中部署问题总结
- 逻辑拼接
- 小结
- printf与a++那些不得不说的事儿
- zip压缩工具