链表

初识STL库中的forward_list

就像array是vector的“轻量型”一样,list也有自己的“轻量型”——forward_list。什么是forward_list,简单来说,forward_list就是单链表,每个节点只包含一个后驱指针,如果读者忘记单链表的相关知识,可跳转《链表》补充相关知识。在C++11后,为了追求轻便高效的容器,STL大师将list“优化”为forward_list,forward_list仅支持头增头

如何为STL库中的list删除元素?

前面我们学会《如何为STL库中list添加元素?》,本节将为读者详细介绍如何删除list容器内的元素。当然,读者也可自行跳转《初识STL库中的list容器》查询list成员函数表,查找“删除”、“移除”等关键字查看具体函数,加深记忆。如今学到这里,看到删除字样,我们第一反应就要是这个pop_front()、pop_back()头删尾删,还有erase()按位置迭代器删,clear()一键全清。不同

判断list是否为空,都给我用empty()!

在判断链表容器是否为空时,有人喜欢用size(),有人喜欢用empty(),这两种方法都可以成功判断list是否为空。如果读者使用的是empty(),那我没话说;但如果读者使用的是size(),读者可就要慎用了,因为在数据量很大的情况下,size()这会降低运行效率。这是为什么呢?要知道,STL大师不会任意制造“容器垃圾”,list有empty()这个成员函数就一定有它的道理。在C++11前,由于

如何为STL库中list添加元素?

对于STL库中的容器来说,添加元素是一个容器最基本的要求。今天我们就来沉浸式学习为list容器添加元素。在那节《初识STL库中的list容器》(进入该页,ctrl+f5查找"插入"就能获取我们需要的函数)我们以表格的形式展示了list容器内的所有成员函数,我们可以两页并用,边查看边使用。头插尾插(push_front()、push_back()不必多说;emplace_fron

如何访问STL库中list容器内元素?

在《初识STL库中的list容器》那节我们就可以看到list容器内所有成员函数,如果我们仔细观察,我们就会发现list既没有at()成员函数又没有data()指针,所以我们不能通过at()或data()来对list进行元素访问。当然,由于链表的元素储存地址不是连续的,所以无法通过'[]'重载进行元素访问,所以list只能“认命”,只能通过最基本的元素访问方式——迭代器进行元素访问。

深度剖析list底层结构

在《初识STL库中的list容器》我们就曾明确谈到list容器是双向链表,每一个节点由两个指针和数据组成,两个指针分别指向前一个节点和后一个节点。长这样:链表属于相对简单的数据结构,我们也可以手搓一个简单链表:首先先创建一个结构体,包括数据域和指针域:structnode{intn;//数据域/*创建node指针初始值为空*/node*nex

STL库中list容器迭代器使用详解

和其他容器一样,在学会创建容器后我们就要认识其迭代器。list同我们学过的vector一样,也有begin()、end()正向迭代器,rbegin()、rend()反向迭代器,更有可读不可改的cbegin()、cend()、crbegin()、crend()这种常量迭代器(c这里表示const,意为不可修改)。他们在链表中的位置如下图所示:list和之前学过的deque、vector、array一

初识STL库中的list容器

链表这种数据结构想必大家都不陌生吧!通过指针链接数据,就像锁链一样将数据”穿“起来,充分利用了”零碎内存“,提高内存空间利用率!如果读者还不熟悉链表这种数据结构,可自行跳转《链表》去学习一下链表。在STL库中,list是以双向链表的身份进入序列式容器集合的。每一个节点(node)都具备一前一后各一个指针,分别指向前节点后后节点,可以想到首节点前指针为NULL,尾节点后指针为NULL。链表不同于ve

什么是链表?

什么是链表?通过研究证明,怎么学好数据结构?怎么入门?需要学些什么东西?链表是数据结构的重要部分,学好用好链表,在解题的过程中,思路将更加清晰,链表作为数据结果的基础之一,本篇将会通过图文和代码展示的形式系统的介……

循环链表的基本操作及C语言代码实现

循环链表的基本操作及C语言代码实现如图,对于插入数据的操作,基本与单链表的插入操作相同,我们可以创建一个独立的结点,通过将需要插入的结点的上一个结点的next指针指向该节点,再由需要插入的结点的next指针指向下一个结点的方式完成插入……