STL

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

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

初识STL库中的list容器

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

deque容器迭代器使用详解

前面《初识STL库中deque容器》我们已经学会创建deque容器并且了解到很多deque的成员函数,本节将会详细讲解deque容器的迭代器。deque容器和vector容器一样,都有begin()、end();rbegin()、rend();cbegin()、crbegin()···下图为deque迭代器指向:下面将通过代码向您展示如何通过迭代器访问deque内的元素:#include<b

vector容器怎么在指定位置前插入元素?

对于vector容器,我们现在已经很熟悉尾插法push_back()和emplace_back()了,并且我们还知道在面对复杂对象的时候,使用emplace_back()的效率更高。但是当我们需要在vector内其他位置插入元素,该怎么办呢?别着急,insert()或emplace()能够帮助你解决这个问题。vector里,insert()和emplace()都能够在指定位置前插入元素,相同点是他

如何访问deque容器?

前面我们讨论过怎么访问vector内容器,其实deque容器访问元素方法与前者一样非常相似,都可以通过'[]'、迭代器、以及back()和front()来访问元素,不同点在于deque没有data()指针也不支持函数模板get()<T>访问,学过的3种序列式容器里只有array容器支持。原因在于函数模板get()<T>访问元素要求容器在编译时固定数组序列,d

vector性能优化小技巧

如果前面内容你都看了的话,那你基本掌握对vector的增删改查了。这一节我们主要谈论对vector性能优化的小技巧。众所周知,vector是动态数组,在长度不够时会自动扩展,其本质就是创建一个更大的数组,把原来的数组挪过去,然后清理原来的数据。根据这个特性,我们可以在使用vector前利用reserve()来给vector设置一个保守的大小,避免一直重复这个“动态扩展”的操作,从而提高性能。该技巧

初识STL库中deque容器

前面我们已经接触到array、vector容器,掌握里一定的基础。现在我们开始进行deque容器的学习。duque,double-ended queue,意思就是双端队列,该容器首尾都能够进行增删元素操作且其时间复杂度为O(1)。deque底层是中控区+缓冲区,可以理解为通过指针链接数组块。deque与vector极其相似,下面展示其所有成员函数:类别成员函数函数签名说明元素访问atreferen

什么是C++模板?

C++模板是C++编程语言中的泛型编程工具,它允许你编写与具体数据类型无关的通用代码。简单来说,模板让你可以创建一个"代码蓝图",编译器会根据这个蓝图为不同的数据类型生成具体的代码。举个例子:在C++的世界里,有很多种数据类型,比如int(整型)、double(双精度浮点型)、float(单精度浮点型)、long long(长整型)等,为了实现各个类型的加法函数,我们一般都会这

STL的基本组成有哪些?

通常认为,STL(标准模板库)的体系结构由六大核心组件构成:容器、算法、迭代器、函数对象、适配器和内存分配器。在这套体系中,迭代器、函数对象、适配器和内存分配器作为支撑性组件,共同为容器和算法这两个核心组件提供服务与协作支持。容器是STL的基础,它如同各种规格的“智能储物箱”。这些模板类(如顺序容器vector、list,关联容器map、set)封装了底层数据结构,负责数据的存储、组织和管理,为用

深度剖析list底层结构

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