ToB企服应用市场:ToB评测及商务社交产业平台

标题: C++STL第五篇(链表List的使用方法) [打印本页]

作者: 吴旭华    时间: 2024-5-14 16:28
标题: C++STL第五篇(链表List的使用方法)
list

链表是一种物理存储单位上非连续、非顺序的存储结构数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)构成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。相较于vector的连续线性空间,list就显得负责很多,它的好处是每次插入大概删除一个元素,就是设置大概开释一个元素的空间。因此,list对于空间的运用有绝对的精准,一点也不浪费。而且,对于任何位置的元素插入或元素的移除,list永远是常数时间。
List和vector是两个最常被使用的容器。List容器是一个双向链表。

list容器的迭代器

List容器不能像vector一样以普通指针作为迭代器,因为其节点不能保证在同一块连续的内存空间上。List迭代器必须有能力指向list的节点,并有能力进行正确的递增、递减、取值、成员存取操作。所谓”list正确的递增,递减、取值、成员取用”是指,递增时指向下一个节点,递减时指向上一个节点,取值时取的是节点的数据值,成员取用时取的是节点的成员。
List*有一个紧张的性子,插入操作和删除操作都不会造成原有list迭代器的失效。这在vector是不成立的,因为vector的插入操作可能造成记忆体重新设置,导致原有的迭代器全部失效,甚至List元素的删除,也只有被删除的那个元素的迭代器失效,其他迭代器不受任何影响。
list是一个循环的双向链表
  1. list<int> myList;
  2. for (int i = 0; i < 10; i++) {
  3.         myList.push_back(i);
  4. }
  5. list<int>::_Nodeptr node = myList._Myhead->_Next;
  6. for (int i = 0; i < myList._Mysize * 2; i++) {
  7.         cout << "Node:" << node->_Myval << endl;
  8.         node = node->_Next;
  9.         if (node == myList._Myhead) {
  10.                 node = node->_Next;
  11.         }
  12. }
复制代码
这是C++11标准库下的写法,list::_Nodeptr node = myList._Myhead->_Next;这句话不实用于其他版本。
构造函数

修改操作

大小

若容器变长,则以默认值添补新位置。
如果容器变短,则末尾超出容器长度的元素被删除。
若容器变长,则以elem值添补新位置。
如果容器变短,则末尾超出容器长度的元素被删除。
其他

[code]list rlist = { 3,2,1,5,4 };cout




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4