首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

STL学习笔记(8)常用容器 list

而且,对于任何位置的元素插入或元素的移除,list 永远是常数时间。 list 和 vector 是两个最常被使用的容器。 ? list 容器是一个双向链表。...链表灵活,但是空间和时间额外耗费较大 list 容器的迭代器 List 容器不能像 vector 一样以普通指针作为迭代器,因为其节点不能保证在同一块连续的内存空间上。...由于 list 是一个双向链表,迭代器必须能够具备前移、后移的能力,所以 list 容器提供的是 Bidirectional Iterators....2. list 数据元素插入和删除操作 push_back(elem);//在容器尾部加入一个元素 pop_back();//删除容器中最后一个元素 push_front(elem);//在容器开头插入一个元素...3. list 大小操作 size();//返回容器中元素的个数 empty();//判断容器是否为空 resize(num);//重新指定容器的长度为 num, 若容器变长,则以默认值填充新位置。

40520
您找到你想要的搜索结果了吗?
是的
没有找到

C++ STLlist容器的基本操作

由于list和vector同属于序列式容器,有很多相同的地方,而上一篇中已经写了vector,所以这一篇着重写list和vector的不同之处和特有之处。...特别注意的地方: (1)STL中迭代器容器中都要注意的地方(vector中已经提到): 1)任何时候同时使用两个迭代器产生的将会是一个前闭后开的区间(具体见插入和删除的例子) 2)begin()指向的是...,有本质区别而导致下面区别 1)list不支持随机访问(2)中已经说明,vector可以像数组那样使用平[]访问元素,而list是不可以的 2) list的插入和删除效率很高,所以list有push_front...、pop_front、sort而vector中这些操作的效率太低了,所以STL中没有写这些功能 3)list的一些特有的函数remove、reverse、unique、splice、merge功能(这些连...,事先需要对两个list排序 112 //有些书中说融合两个未排序的list,融合的list也是未排序的 113 //很遗憾,在vs2010中这样运行会出错的,如下面这段代码,虽然编译通过

81170

【C++】STL 标准模板库 ③ ( STL 容器简介 | STL 容器区别 | STL 容器分类 | 常用的 STL 容器 )

一、STL 容器简介 1、STL 容器区别 STL 容器 用于管理 一组 数据元素 , 不同类型的 STL 容器 的区别 主要是 节点 和 节点之间的关系模型 不同 ; 容器的内存空间是否连续 : 向量...vector 的内存空间是连续的 , 列表 List 的内存空间是不连续的 ; 容器中的元素节点关系 : 顺序排列 , 单向链表 , 双向链表 , 树形关系 ; 容器中的元素是否允许重复 : 集合 Set...主要是 研究 节点 与 节点 之间关系的 ; 2、STL 容器分类 STL 容器 分为 2 大类 , 分别是 " 序列式容器 " 和 " 关联式容器 " ; 序列式容器 : Sequence Containers..., 容器中每个元素的位置都是固定的 , 元素的位置取决于插入元素的 时间 和 位置 , 与元素值无关 ; 向量 Vector , 双端队列 Deque , 列表 List 是序列式容器 ; 如下图所示..., 多重集合 MultiSet , 映射 Map , 多重映射 MultiMap 是 关联式容器 ; 如下图所示 , 关联式容器的元素位置与特定规则有关 , 与插入时间和位置无关 ; 3、常用的 STL

20730

C++STL 2——序列容器 array、vector 、deque、 list 和 forward_list

C++STL 2——序列容器 一、概述 序列容器以线性序列的方式存储元素。它没有对元素进行排序,元素的顺序和存储它们的顺序相同。...访问容器中任意元素的速度要比前三种容器慢,这是因为 list 必须从第一个元素或最后一个元素开始访问,需要沿着链表移动,直到到达想要的元素。...forward list (正向链表容器) :是一个长度可变的、由 T 类型对象组成的序列,它以单链表的形式组织元素,是一类比链表容器快、更节省内存的容器,但是它内部的元素只能从第一个元素开始访问...在深入了解到容器是如何组织元素以后,你会本能地知道哪个容器的哪些成员函数能使用。 2. list 和 forward_list 的函数成员。...list 中 是 - splice_after() - 移动指定位置后面的所有元素到另一个同类型的 list 中 - 是 所有序列容器的函数成员 max_size() 都会返回它能存储的元素个数的最大值

57220

C++(STL):14--- forward_listlist更高效的容器

forward_list 是 C++ 11 新添加的一类容器,其底层实现和 list 容器一样,采用的也是链表结构,只不过 forward_list 使用的是单链表,而 list 使用的是双向链表(如图...另外,由于单链表没有双向链表那样灵活,因此相比 list 容器,forward_list 容器的功能受到了很多限制。...那么,既然 forward_list 容器具有和 list 容器相同的特性,list 容器还可以提供更多的功能函数,forward_list 容器有什么存在的必要呢?...效率高是选用 forward_list 而弃用 list 容器最主要的原因,换句话说,只要是 list 容器和 forward_list 容器都能实现的操作,应优先选择 forward_list 容器。...4) 在已有 forward_list 容器的情况下,通过拷贝该容器可以创建新的 forward_list 容器

1K30

C++(STL):34--- multiset容器详解

回忆一下,set 容器具有以下几个特性: 不再以键值对的方式存储数据,因为 set 容器专门用于存储键和值相等的键值对,因此该容器中真正存储的是各个键值对的值(value); set 容器在存储数据时,...在此基础上,C++ STL 标准库中还提供有一个和 set 容器相似的关联式容器,即 multiset 容器。...所谓“相似”,是指 multiset 容器遵循 set 容器的前 3 个特性,仅在第 4 条特性上有差异。和 set 容器不同的是,multiset 容器可以存储多个值相同的元素。...也就是说,multiset 容器和 set 容器唯一的差别在于,multiset 容器允许存储多个值相同的元素,而 set 容器中只能存储互不相同的元素。...下面样例中,使用了 STL 标准库提供的 std::greater 排序方法,作为 multiset 容器内部的排序规则: #include #include using

1.1K20

【C++】STL 容器 - list 双向链表容器 ① ( 容器特点 | 容器操作时间复杂度 | 构造函数 )

文章目录 一、 list 双向链表容器简介 1、容器特点 2、容器操作时间复杂度 3、遍历访问 5、头文件 二、 list 双向链表容器 构造函数 1、默认无参构造函数 2、创建包含 n 个相同元素的...list 双向链表 3、使用初始化列表构造 list 双向链表 4、使用另外一个 list 容器 构造 list 双向链表容器 一、 list 双向链表容器简介 1、容器特点 list 双向链表容器 可以在...at() 函数 和 [] 操作符访问容器中的元素 ; 5、头文件 使用 list 双向链表容器 , 需要导入 头文件 ; #include 二、 list 双向链表容器 构造函数...双向链表容器 使用另外一个 list 容器 构造 list 双向链表容器 , 有 3 种方式 : 参数为另一个 list 容器引用 : 构造函数会创建一个新的列表 , 它是另一个列表 other 的副本...容器内容 : 1 2 3 4 5 list 容器内容 : 1 2 3 4 5 list 容器内容 : 2 3 4 5 请按任意键继续. . .

12410

STLlist的使用

放在专栏【C++知识总结】,会持续更新,期待支持 1、list简介 list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。...这里我们先了解其使用即可: 3、list的使用 在使用前,需要包含头文件 3.1、构造相关 3.1.1、构造一个空容器 list l;//构造一个存储元素为int类型的空list...3.2、容量相关 3.2.1、size与empty 这里list只存在size,表示list中有效节点个数,而empty就不用说了,用来判断容器是否为空。...如下: 3.3、元素访问 3.3.1迭代器 迭代器是个很奇妙的设计,所有的容器,通过迭代器都可以进行访问容器中的元素,list也不例外,用起来也很简单,就像vector中一样用即可。  ...这里,begin与end分别指向list中第一个有效元素,以及最后一个有效元素的下一个位置,而我们的begin与end区间,通常都是左闭右开,对于环状的链表来说,只需要在尾端加入一个空白节点,便符合STL

15130

走近STL -- 你好,List

1、你好,List 从实现层面看,相较于Vector的线性空间,List的实现要复杂的多。 List的优势在于每次插入或删除一个元素,就分配或释放一个位置。...因此,List对于空间的把控有绝对的精准。 而且,对于从任何节点增删数据,List消耗的永远是常数时间。 List和Vector的使用应该视元素的多寡、元素的构造复杂度、元素的存取频繁度而定。...List优在存取,Vector优在查询。 2、List节点 每一个自己写过链表的人都知道,链表的节点和链表本身是分开设计的。...3、List基本函数使用 创 #include typedef struct rect { ··· }Rect; listtest; //声明一个链表,用于存放结构体数据...大小 test.size(); //容器已存入数据量 test.capacity(); //容器还能存多少数据量 //其实不用担心容器不够大,容量要满的时候它会自己扩容 其他 (1)压缩list /

34730

list容器

双向循环链表list list是双向循环链表,每个元素都知道前面一个元素和后面一个元素。...list和vector的差别: 在list中,因为其内存分配是非连续的,因此不能像vector那样用[]操作符取值。而仅仅能用迭代器来訪问list中的元素。...list申请新的节点单元,插入到list链表中,数据存放结构例如以下图所看到的: list每次添加一个元素,不存在又一次申请内存的情况,它的成本是恒定的。...插入一个元素到list中 max_size() 返回list能容纳的最大元素数量 merge() 合并两个list pop_back() 删除最后一个元素 pop_front(...() 把list的元素倒转 size() 返回list中的元素个数 sort() 给list排序 splice() 合并两个list swap() 交换两个list unique

47000

【C++】STL---list

STL---list 一、list 的介绍 list 是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。...与其他的序列式容器相比(array,vector,deque),list通常在任意位置进行插入、移除元素的执行效率更好。...与其他序列式容器相比,list 和 forward_list 最大的缺陷是不支持任意位置的随机访问,比如:要访问 list 的第6个元素,必须从已知的位置(比如头部或者尾部)迭代到该位置,在这段位置上迭代需要线性的时间开销...打印容器的接口 (1)打印链表整型的接口 像 vector、list 这些容器都没有重载流插入运算符,所以我们可以自己实现一个打印的接口函数;我们先来实现一下打印链表整型的接口: // 打印链表 -...那还是不能打印出来,所以我们可以实现一个专门打印容器的接口; (3)打印容器的接口 我们使用模板参数代表容器,让编译器到指定容器去取它的迭代器即可; // 打印容器 -- 能打印各种容器 template

4210

STL源码解析--list揭秘

1 list简介 list也是最经常使用的一个容器,尤其是在对容器中的元素进行频繁的插入和删除时,通过指针操作使得list的插入和删除在常数时间内即可完成。...1.1 list数据节点 list是通过指针将不同的节点进行串联得到,因此在设计list的时候需要对节点进行单独定义,在新的STL list容器中对节点进行如下定义: //节点基类 struct _...List_node_base { _List_node_base* _M_next; _List_node_base* _M_prev; } //节点模板,继承基类 template<typename...1.2 list的迭代器 list管理的不是连续的内存空间,不能通过下标索引的方式访问,但是通过list提供的迭代器可以对list中的节点进行正确的访问。...STL的迭代器是双向链表,迭代器通过加或者减能够进行正确的访问list中的元素。在对迭代器进行操作时,同样会产生迭代器失效的问题,但是list的迭代器时候只指针对删除操作时指向被删除节点的迭代器失效。

14210
领券