C++STL第五篇(链表List的使用方法)

这篇具有很好参考价值的文章主要介绍了C++STL第五篇(链表List的使用方法)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

list

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

List和vector是两个最常被使用的容器。List容器是一个双向链表。C++STL第五篇(链表List的使用方法)

  • 采用动态存储分配,不会造成内存浪费和溢出

  • 链表执行插入和删除操作十分方便,修改指针即可,不需要移动大量元素

  • 链表灵活,但是空间和时间额外耗费较大

list容器的迭代器

List容器不能像vector一样以普通指针作为迭代器,因为其节点不能保证在同一块连续的内存空间上。List迭代器必须有能力指向list的节点,并有能力进行正确的递增、递减、取值、成员存取操作。所谓”list正确的递增,递减、取值、成员取用”是指,递增时指向下一个节点,递减时指向上一个节点,取值时取的是节点的数据值,成员取用时取的是节点的成员。

List*有一个重要的性质,插入操作和删除操作都不会造成原有list迭代器的失效。这在vector是不成立的,因为vector的插入操作可能造成记忆体重新配置,导致原有的迭代器全部失效,甚至List元素的删除,也只有被删除的那个元素的迭代器失效,其他迭代器不受任何影响。

list是一个循环的双向链表

list<int> myList;
for (int i = 0; i < 10; i++) {
	myList.push_back(i);
}

list<int>::_Nodeptr node = myList._Myhead->_Next;

for (int i = 0; i < myList._Mysize * 2; i++) {
	cout << "Node:" << node->_Myval << endl;
	node = node->_Next;
	if (node == myList._Myhead) {
		node = node->_Next;
	}
}

这是C++11标准库下的写法,list<int>::_Nodeptr node = myList._Myhead->_Next;这句话不适用于其他版本。

构造函数

  1. 默认构造函数

    std::list<T> lst; // 创建一个空的列表 lst,其中 T 是列表中元素的类型。
    
  2. 区间构造函数

    std::list<T> lst(beg, end); // 将区间 `[beg, end)` 中的元素拷贝给列表 lst。
    
  3. 重复元素构造函数

    std::list<T> lst(n, elem); // 创建包含 n 个值为 elem 的元素的列表 lst。
    
  4. 拷贝构造函数

    std::list<T> lst2(lst); // 使用列表 lst 初始化列表 lst2,创建 lst 的副本。
    

修改操作

  • push_back(elem): 在容器尾部加入一个元素。
  • pop_back(): 删除容器中最后一个元素。
  • push_front(elem): 在容器开头插入一个元素。
  • pop_front(): 从容器开头移除第一个元素。
  • insert(pos, elem): 在 pos 位置插入 elem 元素的拷贝,返回新数据的位置。
  • insert(pos, n, elem): 在 pos 位置插入 n 个 elem 数据,无返回值。
  • insert(pos, beg, end): 在 pos 位置插入 [beg, end) 区间的数据,无返回值。
  • clear(): 移除容器的所有数据。
  • erase(beg, end): 删除 [beg, end) 区间的数据,返回下一个数据的位置。
  • erase(pos): 删除 pos 位置的数据,返回下一个数据的位置。
  • remove(elem): 删除容器中所有与 elem 值匹配的元素。

大小

  • size();//返回容器中元素的个数

  • empty();//判断容器是否为空

  • resize(num);//重新指定容器的长度为num,

若容器变长,则以默认值填充新位置。

如果容器变短,则末尾超出容器长度的元素被删除。

  • resize(num, elem);//重新指定容器的长度为num,

若容器变长,则以elem值填充新位置。

如果容器变短,则末尾超出容器长度的元素被删除。

其他

list<int> rlist = { 3,2,1,5,4 };
cout << "rlist.front:" << rlist.front() << endl;
cout << "rlist.back:" << rlist.back() << endl;
rlist.reverse();
// 使用迭代器遍历链表并输出元素
for (auto it = rlist.begin(); it != rlist.end(); ++it) {
	std::cout << *it << " ";
}
rlist.sort();

C++STL第五篇(链表List的使用方法)文章来源地址https://www.toymoban.com/news/detail-841407.html

到了这里,关于C++STL第五篇(链表List的使用方法)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 一种解决A*Pathfindings使用RichAI寻路 跌落出导航网格的方法

    A*Pathfinding是Unity中一个比较常用的寻路插件,其主要功能是绘制导航图并让物体沿着导航图向目标移动,可结合多种方法进行寻路方式的扩展。   该插件付费的Pro版拥有一个通过投影方式获得场景中所有网格(mesh),在网格(mesh)表面自动生成导航网格的功能,称为RecastGraph,同

    2024年02月05日
    浏览(58)
  • list集合对sort的使用方法

    List集合的排序: java提供了两种排序方式,分别是Collections.sort(List)和Collections.sort(List,Commparator),下面就这两种方法的使用做详细的说明: 方法一:Collections.sort(List) 这个方法有分两种情况:1、比较的是基础数据 2、比较的是引用数据 1、基础数据的比较呢,一般都是直接比较,因

    2024年02月09日
    浏览(34)
  • 一种使用Java的快速将Web中表格转换成Excel的方法

            随着后疫情时代的到来,在过去的2022年,全国的经济情况,想必是很多学者和研究对象都非常关心的事。而这些数据在国家统计局网站上都有相应的记录。通过分析这些数据,可以从某一个角度来验证和观察当下的经济情况。         全国共计有1279个县级单

    2024年02月06日
    浏览(39)
  • 一种使用wireshark快速分析抓包文件amr音频流的思路方法

    解决方案: 1. 使用wireshark过滤amr,并导出原始数据文件; 2.使用ue的二进制编辑模式,编辑该文件,添加amr头,6个字节数据“#!AMR”,字节数据为 23 21 41 4D 52 0A 3.修正格式:通过抓包发现,amr的负载中,总是多一个字节用于描述rtp流信息,这个字节被导出到了原始数据中,每一

    2024年02月06日
    浏览(48)
  • SwiftUI 中List动态列表容器视图的使用方法

    List  是 SwiftUI 中用于显示动态列表的容器视图。它接受一个或多个子视图,并根据提供的数据动态生成对应的列表项。 下面是  List  的常见用法和一些常用的参数: 基本用法: 在这个例子中, List  包含了三个  Text  视图作为列表项。 使用  ForEach  进行动态列表生成:  

    2024年02月07日
    浏览(56)
  • 使用Map.clear()、List.clear()方法,清空时注意!

    对 Map、List 对象进行清空操作时,常常会使用 clear() 方法。 例如,清空 Map 换做 List 也是同样的用法 本文想要说的是,需要注意,如果使用clear()方法, Map被清空的同时,原本对Map的引用会一起被清空!!! 代码举例: 这段代码也很简单,两层循环。 最里层向 listTemp 中添加

    2024年01月20日
    浏览(47)
  • 【一种使用浏览器读取本地excel、josn等数据文件的方法】Python+JavaScript+HTML实现

    一般来说,为了网络访问安全,浏览器是不能直接加载本地文件的,IE内核的浏览器提供了AX控件实现本地文件的读取,Chrome 86 版本后也提供了相应的API,但都存在使用限制和兼容性问题。有时开发者只是想利用浏览器编制一些简单的脚本完成一些任务,不想学习C、C++、Pyt

    2024年02月07日
    浏览(66)
  • 使用java.util.List的containsAll()方法可能导致的问题

    今天在偶然之间发现了一个bug,原因居然是使用了containsAll()方法,这个问题很简单,看以下代码就能发现很大的问题。 上面的结果最后一行打印的是true,因为containsAll()方法的作用类似于遍历指定的集合c,通过contains()比较集合中每个元素,如果有元素不包含在当前的list对象

    2024年02月14日
    浏览(59)
  • 一种使用热成像和自动编码器和 3D-CNN 模型堆叠集成进行跌倒检测的新方法

    作者信息: 跌倒是造成伤害和死亡的重要原因,尤其是在老年人口中。及早发现跌倒对于减轻其影响至关重要。热成像是一种很有前途的检测跌倒的技术,因为它是非侵入性的,可以在弱光条件下运行。然而,由于这些图像的分辨率低且缺乏颜色信息,准确检测热图像中的跌

    2024年02月03日
    浏览(42)
  • 如何实现动态分配,malloc,realloc,calloc的使用方法,数组,链表,结构体实现动态分配(含代码实现)

    🎊【数据结构与算法】专题正在持续更新中,各种数据结构的创建原理与运用✨,经典算法的解析✨都在这儿,欢迎大家前往订阅本专题,获取更多详细信息哦🎏🎏🎏 🪔本系列专栏 -  数据结构与算法_勾栏听曲_0 🍻欢迎大家  🏹  点赞👍  评论📨  收藏⭐️ 📌个人主

    2023年04月27日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包