STL中的链表是一个双向循环链表。...一、构造函数 list lst; list(bag,end); list(n,elem); list(const list &list); 二、list的赋值和交换 assign(beg,end)...; assign(n,ele); list& operator=(const list &list); swap(list); #include #includelist> #include...for (list::const_iterator it = d.begin(); it !...list lst3; lst3.assign(lst1.begin(), lst1.end()); list lst4; lst4.assign(3, 4);
而且,对于任何位置的元素插入或元素的移除,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, 若容器变长,则以默认值填充新位置。
list 的缺点是无法通过位置来直接访问序列中的元素,也就是说,不能索引元素。 1.初始化 list 容器的构造函数的用法类似于 vector 或 deque 容器。...list 容器有一个拷贝构造函数,因此可以生成一个现有 list 容器的副本: std::list save_values {values}; // Duplicate of values...两个容器中的元素都必须是升序。参数 list 容器中的元素会被合并到当前的 list 容器中。...这个函数将参数 list 容器中的元素移动到当前容器中指定位置的前面。可以移动单个元素、一段元素或源容器的全部元素。...forward_list 的操作比 list 容器还要快,而且占用的内存更少. 无法使用反向迭代器。
目录 一丶List容器的存储结构 二丶丶STL中list容器的使用....一丶List容器的存储结构 list容器底层是链表结构来维护的.跟vector不一样. vector是数组维护的.拥有连续内存.所以可以使用[] 运算符操作.list底层是链表维护.内存不连续.所以不能使用...二丶丶STL中list容器的使用....容器 list::iterator it = lst.begin(); lst.sort(less()); //从小到大排序 lst.sort(greater...cout << "--------------------------" << endl; getchar(); system("pause"); } 总结: 比vector容器多了一个头操作
由于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中这样运行会出错的,如下面这段代码,虽然编译通过
一、STL 容器简介 1、STL 容器区别 STL 容器 用于管理 一组 数据元素 , 不同类型的 STL 容器 的区别 主要是 节点 和 节点之间的关系模型 不同 ; 容器的内存空间是否连续 : 向量...vector 的内存空间是连续的 , 列表 List 的内存空间是不连续的 ; 容器中的元素节点关系 : 顺序排列 , 单向链表 , 双向链表 , 树形关系 ; 容器中的元素是否允许重复 : 集合 Set...主要是 研究 节点 与 节点 之间关系的 ; 2、STL 容器分类 STL 容器 分为 2 大类 , 分别是 " 序列式容器 " 和 " 关联式容器 " ; 序列式容器 : Sequence Containers..., 容器中每个元素的位置都是固定的 , 元素的位置取决于插入元素的 时间 和 位置 , 与元素值无关 ; 向量 Vector , 双端队列 Deque , 列表 List 是序列式容器 ; 如下图所示..., 多重集合 MultiSet , 映射 Map , 多重映射 MultiMap 是 关联式容器 ; 如下图所示 , 关联式容器的元素位置与特定规则有关 , 与插入时间和位置无关 ; 3、常用的 STL
list list类似于C语言中的双向链表,它通过指针来进行数据的访问,因此维护的内存空间可以不连续,这也非常有利于数据的随机存取,因而它没有提供 [] 操作符重载。...赋值或者为list赋值num个以val为值 back back()函数返回一个引用,指向list的最后一个元素。...begin begin()函数返回一个迭代器,指向list的第一个元素。...reverse reverse()函数把list所有元素倒转。...splice void splice( iterator pos, list &lst ); void splice( iterator pos, list &lst, iterator del );
C++STL 2——序列容器 一、概述 序列容器以线性序列的方式存储元素。它没有对元素进行排序,元素的顺序和存储它们的顺序相同。...访问容器中任意元素的速度要比前三种容器慢,这是因为 list 必须从第一个元素或最后一个元素开始访问,需要沿着链表移动,直到到达想要的元素。...forward list (正向链表容器) :是一个长度可变的、由 T 类型对象组成的序列,它以单链表的形式组织元素,是一类比链表容器快、更节省内存的容器,但是它内部的元素只能从第一个元素开始访问...在深入了解到容器是如何组织元素以后,你会本能地知道哪个容器的哪些成员函数能使用。 2. list 和 forward_list 的函数成员。...list 中 是 - splice_after() - 移动指定位置后面的所有元素到另一个同类型的 list 中 - 是 所有序列容器的函数成员 max_size() 都会返回它能存储的元素个数的最大值
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 容器。
参考: [C++] STL 容器 (一) - 基本介紹 [C++] STL 容器 (二) - Iterator 部分示例:
一、list节点 list是一个双向循环带头的链表,所以链表节点结构如下: template struct ListNode { T val; ListNode* next...实现 3.1、构造函数 先看一下list构造函数的接口 构造函数 接口说明 list() 默认构造函数,构造一个空的list list (size_type n, const value_type& val...=value_type()) 用n个val值构造list list (InputIterator first, InputIterator last) 还有一段迭代器区间初始化 list (const...list& x) 拷贝构造函数 这里我们实现的list是带头双向循环链表,具体结构与之前的双向链表相同。...list(const list& l) { empty_init(); list(l.begin(), l.end()); _size = l.size(); } 3.2、迭代器
文章目录 一、 list 双向链表容器简介 1、容器特点 2、容器操作时间复杂度 3、遍历访问 5、头文件 二、 list 双向链表容器 构造函数 1、默认无参构造函数 2、创建包含 n 个相同元素的...list 双向链表 3、使用初始化列表构造 list 双向链表 4、使用另外一个 list 容器 构造 list 双向链表容器 一、 list 双向链表容器简介 1、容器特点 list 双向链表容器 可以在...at() 函数 和 [] 操作符访问容器中的元素 ; 5、头文件 使用 list 双向链表容器 , 需要导入 list> 头文件 ; #include list> 二、 list 双向链表容器 构造函数...双向链表容器 使用另外一个 list 容器 构造 list 双向链表容器 , 有 3 种方式 : 参数为另一个 list 容器引用 : 构造函数会创建一个新的列表 , 它是另一个列表 other 的副本...容器内容 : 1 2 3 4 5 list 容器内容 : 1 2 3 4 5 list 容器内容 : 2 3 4 5 请按任意键继续. . .
1.list的介绍即使用 1.1list介绍 其实,list就是我们C语言时,数据结构中的双向链表。...以下为list中一些常见的重要接口。 1.2.1list构造 1.2.2list的iterator的使用 此处,大家可暂时将迭代器理解成一个指针,该指针指向list中的某个节点。 注意!!!...1.2.3list capacity 1.2.4list element access 1.2.5list modifiers list中还有一些操作,需要用到时大家可参阅list的文档说明. 1.2.6list...因为list的底层结构为带头结点的双向循环链表,因此在list中进行插入时是不会导致list的迭代器失效的,只有在删除时才会失效,并且失效的只是指向被删除节点的迭代器,其他迭代器不会受到影响. 3.list...和vector的差别 vector与list都是STL中非常重要的序列式容器,由于两个容器的底层结构不同,导致其特性以及应用场景不同,其主要不同如下: 本期关于list讲解结束,谢谢支持!
前言 要模拟实现list,必须要熟悉list的底层结构以及其接口的含义,list的底层是带头双向循环链表,现在我们来模拟实现list容器的主要接口。...list的介绍 1、list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。...4、与其他的序列式容器相比(array,vector,deque),list通常在任意位置进行插入、移除元素的执行效率更好。...5、与其他序列式容器相比,list和forward_list最大的缺陷是不支持任意位置的随机访问,比如:要访问list的第6个元素,必须从已知的位置(比如头部或者尾部)迭代到该位置,在这段位置上迭代需要线性的时间开销...但是在list容器中是不能这样的,因为前面两者的底层物理空间是连续的,符合迭代器++与- -的行为。
放在专栏【C++知识总结】,会持续更新,期待支持 1、list简介 list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。...这里我们先了解其使用即可: 3、list的使用 在使用前,需要包含头文件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
前言 本篇博客我们接着来理解一个STL库里的list链表的结构,根据前面数据结构的铺垫,理解这个结构相对比较容易。...我们来一起看看吧 个人主页:小张同学zkf ⏩ 文章专栏:C++ 若有问题 评论区见 欢迎大家点赞收藏⭐文章 1.list介绍 文档:list 2.list使用 2.1list的构造...2.2list capacity 2.3list element access 2.4list modifiers 3.list迭代器 此处大家可将迭代器暂时理解成类似于指针, 迭代器失效即迭代器所指向的节点的无...因为 list 的底层结构为带头结点的双向循环链表 ,因此 在 list 中进行插入 时是不会导致 list 的迭代器失效的,只有在删除时才会失效,并且失效的只是指向被删除节点的迭 代器,其他迭代器不会受到影响...; } private: node* _head; size_t _size; }; 5.list与vector对比 结束语 list总结到这里,下篇准备STL库里的queue和
list的介绍和使用 list的介绍 list的介绍list的介绍 list是双向循环链表 list的使用 构造 list(size_t...n,const value_type& val = value_type()) 构造的list中包含n个值为val的元素 list() 构造空list lis(const list& x) 拷贝构造函数...list(inputlerator first,inputlterator last) 用[first,list)的区间中元素构造list int main() { list A; list... B(5,1); list C(B); list D(C.begin(),C.end()); return 0; } 迭代器 begin 返回第一个元素的迭代器...是否为空 size 返回list中有效节点数 front 返回list地第一个节点中值的引用 back 返回list最后一个节点中值的引用 push_front 头插 pop_front 头删 push_back
1、你好,List 从实现层面看,相较于Vector的线性空间,List的实现要复杂的多。 List的优势在于每次插入或删除一个元素,就分配或释放一个位置。...因此,List对于空间的把控有绝对的精准。 而且,对于从任何节点增删数据,List消耗的永远是常数时间。 List和Vector的使用应该视元素的多寡、元素的构造复杂度、元素的存取频繁度而定。...List优在存取,Vector优在查询。 2、List节点 每一个自己写过链表的人都知道,链表的节点和链表本身是分开设计的。...3、List基本函数使用 创 #includelist> typedef struct rect { ··· }Rect; listtest; //声明一个链表,用于存放结构体数据...大小 test.size(); //容器已存入数据量 test.capacity(); //容器还能存多少数据量 //其实不用担心容器不够大,容量要满的时候它会自己扩容 其他 (1)压缩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
#include #includelist> #include using namespace std; //加入const限制只读,并使用const_iterator.../*cout << "姓名:" << p.name << "," << "年龄:" << p.age;*/ return cout; } void printPerson(const list...& p) { for (list::const_iterator it = p.begin(); it !...= p2.age) { return p1.name < p2.name; } return p1.age <p2.age; } void test() { list
领取专属 10元无门槛券
手把手带您无忧上云