博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
STL总结之list
阅读量:6232 次
发布时间:2019-06-21

本文共 1054 字,大约阅读时间需要 3 分钟。

STL中list和我们传统意义上的链表一样可以进行动态节点添加和释放.
优点:适合动态删除和添加
缺点:不支持随机访问.
 
C++标准对list模板声明:
template < class T, class Allocator = allocator< T> > class list;
 
1)list的构造有多种方式和vector差不多,如下:
list<int > first;
list<int > second(4,100);
list<int > third( second.begin (),second. end());
list<int > fourth( third);
 
int myints [] = {16,2,77,29};
list<int > fifth ( myints, myints + sizeof( myints) / sizeof (int) );
 
2)list的内存分配方式(以vs2008中为例).
list不管以什么方式初始化,它总是会先分配一个头节点,节点内容为空, 并且头结点的前一个节点指向最后一个节点, 最后一个节点指向头节点.
以后不管是以insert, push_back, push_front插入数据,list都会使用std::allocator<T>分配器进行重新内存分配.
进行pop_front, pop_back, erase, clear, resize, assign删除的节点内存都会被释放掉.这和vector不太一样.
 
3)list成员函数splice是从一个list中移动元素到另一list中;
程序1:
输出:
splice操作是将一个list的中的元素直接拼接到另一list中,并不会重新申请释放内存.
 
4)list成员函数sort是将list中的元素进行排序(默认为升序),允许用户自定义比较规则.
在vs下我们看到排序使用了非递归的归并排序,使用了一个数组来保存中间序列最后遍历整个数组,将所有序列合并.
 
5)list成员函数reverse是对list进行翻转.成员函数 unique只能去除相邻的相同元素, 因此如果要去除相同元素最好保证list有序.
 
6)由于list适合添加和删除元素,list提供了remove和remove_if函数移除指定的元素.
程序:
输出:
 
总结:容器list适合频繁添加和删除元素情况.
 
 
 

转载于:https://www.cnblogs.com/ourroad/p/3356041.html

你可能感兴趣的文章
ok 在博客园落户 安心做一个快乐的码农
查看>>
[Nhibernate]对象状态
查看>>
Python动态展现之一
查看>>
清空数据库中所有表数据的方法
查看>>
Playfair 加密
查看>>
串口编程(二) - 代码实现
查看>>
js数组
查看>>
Apache与tomcat
查看>>
2017《Java技术》 预留作业2 胡开辉
查看>>
Scrapy基础
查看>>
Java练习 SDUT-3349_答答租车系统(面向对象综合练习)
查看>>
团队开发冲刺第二阶段9
查看>>
Nginx配置文件中文详解
查看>>
Uva 11248 网络扩容
查看>>
高通Vuforia
查看>>
Asp.net实现直接在浏览器预览Word、Excel、PDF、Txt文件(附源码)
查看>>
POJ 1003
查看>>
python——ddt + excel + HTMLTestRunner 实现接口测试
查看>>
linux 常用命令
查看>>
linux tracepoint用法【转】
查看>>