STL序列式容器之list
一,list容器基本概念
1.list容器基本知识
- list容器的底部数据结构为双向链表,可以高效的进行插入和删除元素。
- list因为底层数据结构是双向链表,因此不支持下标操作和.at()函数的操作。要获取元素,必须从头到尾遍历。
- 使用list容器必须引入头文件# include<list>。
二,list容器构造函数
1.无参构造函数
- // 无参构造函数
- list<string> l1;
2.有参构造函数
- // 有参构造函数,10个字符'A'来初始化容器
- list<char> l2(, 'A');
- // 有参构造函数,用上面的容器初始化下面的容器
- list<char> l3(l2.begin(), l2.end());
3.拷贝构造函数
- // 有参构造函数
- list<char> l1(, 'A');
- // 拷贝构造函数
- list<char> l2 = l1;
4.析构函数
list的析构函数用来释放容器中元素所占用的内存。
三,list容器的操作符重载
1.赋值操作符
- // 定义链表容器l1
- list<string> l1(, "HelloWorld");
- // 定义链表容器l2
- list<string> l2;
- // 赋值操作符重载
- l2 = l1;
四,list容器的成员函数
1.头部插入和删除元素
- // 定义容器
- list<string> l1;
- // 在容器头部添加元素
- l1.push_front("Hello");
- l1.push_front("World");
- l1.push_front("C++");
- // 移除容器头部元素
- l1.pop_front();
2.尾部插入和删除元素
- // 定义容器
- list<string> l1;
- // 在容器尾部添加元素
- l1.push_back("Oracle");
- l1.push_back("IBM");
- l1.push_back("Microsoft");
- // 移除容器尾部元素
- l1.pop_back();
3.容器的头部和尾部元素
- // 定义容器
- list<string> l1;
- // 在容器头部添加元素
- l1.push_front("Hello");
- l1.push_front("World");
- l1.push_front("C++");
- // 获取容器的头部和尾部元素
- string first = l1.front();
- string last = l1.back();
4.容器的大小
- // 定义容器
- list<string> l1;
- // 在容器头部添加元素
- l1.push_front("Hello");
- l1.push_front("World");
- l1.push_front("C++");
- // 获取容器的大小
- int size = l1.size();
5.容器的清空
- // 定义容器
- list<string> l1(,"HelloWorld");
- // 容器的清空
- l1.clear();
6.容器是否为空
- // 定义容器
- list<string> l1(,"HelloWorld");
- // 容器是否为空
- bool isEmpty = l1.empty();
7.容器的插入元素
- // 定义容器l2
- list<string> l2(, "HelloWorld");
- // 在容器第二个位置插入"HelloC++",list只支持++和--,不支持具体的加几和减几,因为底层是链表
- l2.insert(++l2.begin(), "HelloC++");
- // 基于list容器的特征,经常配合迭代器来插入
- for (list<string>::iterator it = l2.begin(); it != l2.end(); it++)
- {
- l2.insert(it, "H");
- }
8.容器的删除元素
- // 定义容器l2
- list<string> l2(, "HelloWorld");
- // 删除容器的所有元素
- l2.erase(l2.begin(), l2.end());
- // 根据容器元素的值删除
- l2.remove("HelloC++");
9.容器的遍历
- // 定义容器
- list<string> l2(,"HelloWorld");
- // 增强for遍历
- for (string tmp : l2)
- {
- cout << tmp << " " ;
- }
- cout << endl;
- // 正向遍历
- for (list<string>::iterator it = l2.begin(); it != l2.end(); it++)
- {
- cout << *it << " ";
- }
- cout << endl;
- // 反向遍历
- for (list<string>::reverse_iterator it = l2.rbegin(); it != l2.rend(); it++)
- {
- cout << *it << " ";
- }
- cout << endl;
10.容器的反转
- // 定义容器
- list<string> l1;
- // 在容器头部添加元素
- l1.push_front("Hello");
- l1.push_front("World");
- l1.push_front("C++");
- // 容器的反转
- l1.reverse();
11.list的遍历删除
- # include<iostream>
- # include<list>
- using namespace std;
- int main()
- {
- // 定义容器
- list<int> v;
- // 添加数据
- v.push_back();
- v.push_back();
- v.push_back();
- v.push_back();
- v.push_back();
- v.push_back();
- // 这里注意不需要++it
- for (list<int>::iterator it = v.begin(); it != v.end();)
- {
- // 删除偶数
- if (*it % == )
- {
- // erase删除该元素后返回下一个元素的迭代器
- it = v.erase(it);
- }
- else {
- it++;
- }
- }
- // 遍历
- for (int tmp : v)
- {
- cout << tmp << " ";
- }
- cout << endl;
- return ;
- }
五,list容器注意事项
1.存储自定义数据类型的注意
要存储的自定义类型必须提供拷贝构造函数,因为容器是通过值的复制方式将元素存入到容器中的。
2.list容器的访问
list容器不支持随机存取元素,即不支持索引下标的方式访问和修改元素,要想访问元素必须通过迭代器进行遍历,遍历到要找到的位置。
3.list容器的迭代器
- list容器的迭代器不支持具体数据的加减,只支持++和--操作。
- list的erase函数删除迭代器指向的元素后返回下一个迭代器。
STL序列式容器之list的更多相关文章
- C++ 序列式容器之vector
什么是容器 容器,顾名思义,是用来容放东西的场所.C++容器容放某种数据结构,以利于对数据的搜寻或排序或其他特殊目的.众所周知,常用的数据结构不外乎:数组array, 链表list, 树tree ...
- STL关联式容器之set和multiset
一,set和multiset的基础知识 1.set和multiset的基础 set是一个集合容器,其中所包含的元素是唯一的,集合中的元素按照一定的顺序排列,元素插入过程是按照排序规则插入的.所以不能指 ...
- STL关联式容器之map和multimap
一,map和multimap的概念 1.map和multimap的基本知识 map是标准的关联式容器,一个map是一个键值对序列,即(key,value)对.它提供基于key的快速检索能力. map中 ...
- STL关联式容器之set\map ----以STL源码为例
关联式容器的特征:所用元素都会根据元素的键值自动被排序. set STL 中的关联式容器低层数据结构为红黑树,其功能都是调用低层数据结构中提供的相应接口. set元的元素不会像map那样同时拥有键(k ...
- STL序列式容器学习总结
STL序列式容器学习总结 参考资料:<STL源码剖析> 参考网址: Vector: http://www.cnblogs.com/zhonghuasong/p/5975979.html L ...
- STL——序列式容器
一.容器概述与分类 1. STL容器即是将运用最广的一些数据结构实现出来.常用的数据结构有array, list, tree, stack, queue, hash table, set, map…… ...
- 数据结构-STL序列式容器总结
根据序列在容器中的排列特性,将常见数据结构分为:序列式容器和关联式容器. 常见序列式容器有 1.array(build-in)c++內建 2.vector 3.heap(以算法方式呈现) 4.prio ...
- STL的六大容器之iterator----自定义范式
STL的iterator组件,分离了容器和算法. 一.规定 在STL体系下定义iterator,要满足规定的一些规范: 1.iterator_category 有5中分类,决定胃具体的操作,如:++, ...
- STL序列式容器
1.vector 空间运用的灵活性. 实现技术——关键是对大小的控制以及重新配置时的数据移动效率. 配置新空间.数据移动.释还旧空间 erase(int pos ...
随机推荐
- “-bash: !”: event not found"、echo > sudo permission denied
1. "-bash: !": event not found" 比如当我们在 linux 命令行输入echo "Reboot your instance!&qu ...
- 被误解的MVC和被神化的MVVM
MVC 的历史 MVC,全称是 Model View Controller,是模型 (model)-视图 (view)-控制器 (controller) 的缩写.它表示的是一种常见的客户端软件开发框架 ...
- 用Java将字符串的首字母转换大小写
在项目开发的时候会需要统一字符串的格式,比如首字母要求统一大写或小写,那用Java如何实现这一功能?下面一起来学习学习. 话不多说,直接上代码 ? 1 2 3 4 5 6 7 8 9 10 11 12 ...
- nginx 代理服务器
目前现状:只有1个机器能上网(web),其他机器不能方法:能上网的做一个代理web服务器中转,其他机器连接它即可。采用nginxNginx配置如下:server{ resolver 8. ...
- 【u249】新斯诺克
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 斯诺克又称英式台球,是一种流行的台球运动.在球桌上,台面四角以及两长边中心位置各有一个球洞,使用的球分 ...
- 【u247】生物进化
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 在一片茂密的原始森林中,生物学家们发现了几种远古时期的动物化石.他们将化石依次编号为1,2,3,--n ...
- 【t099】最接近神的人
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 破解了符文之语,小FF开启了通往地下的道路.当他走到最底层时,发现正前方有一扇巨石门,门上雕刻着一幅古 ...
- HDU 1013 Digital Roots 题解
Problem Description The digital root of a positive integer is found by summing the digits of the int ...
- 转载:使用bat命令来快速安装和卸载Service服务
一般我们在编写完Service服务程序后,都是通过cmd命令提示窗口来安装或卸载服务,但频繁的在cmd窗口中去“拼”文件的路径着实让人“不能忍”.所以,我们需要一钟“更快捷”的方式来进行安装或者卸载操 ...
- php面试题9(看的时候就应该随手截图做笔记的)
php面试题9(看的时候就应该随手截图做笔记的) 一.总结 看的时候就应该随手截图做笔记的 二.php面试题9 一.选择题:1.下面哪个表达式不能将两个字符串$s1 和$s2 串联成一个单独的字符串? ...