STL

C++ STL vector容器性能优化小技巧

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

C++ STL map容器如何添加元素?

为了给map容器添加元素,我们有4种方法:1. 最简洁的方式就是通过'[]',中括号内为key,通过map[key]=value的形式为map添加元素(这里如果已存在key,则进行覆盖);2. 然后就是大家熟悉的insert(),insert()在此处既可单个插入,又能多个插入,还可以通过迭代器参数优化从指定位置寻找插入位置;3. 然后就是emplace()直接构造了,但是仅能添加

C++模板是什么?

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

C++ STL序列式容器是什么?

序列式容器是STL中的一类容器,它们以严格的线性顺序来存储元素。这个顺序由元素被插入的位置决定,每个元素都有固定的前后关系。序列式容器包括以下容器:容器类型数据结构长度特性访问效率插入删除效率内存布局array<T,N>固定数组编译时固定O(1) 随机访问不支持增删元素连续内存vector<T>动态数组运行时可变O(1) 随机访问尾部O(1),中间O(n)连续内存deque

C++ STL array容器入门

在C++11标准之前,STL中并没有array这个容器。程序员们主要使用C风格数组和vector来管理序列数据,但这两种方式都存在各自的局限性。C风格数组过于简单,无法动态调整大小;vector虽然安全好用,但是过于笨重。至此,array容器孕育而生。array本质上是对C风格数组的轻量级封装,保留了性能优势的同时增加了安全性。下表展示了array容器支持的成员函数和成员变量:成员函数功能说明be

浅谈C++ STL的基本组成部分

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

深度剖析C++ STL vector容器的底层构造

学习了这么久的vector,想必读者对vector的底层原理一定充满好奇,为了满足读者的求知欲,本节将带领读者深入vector的学习,探寻其底层实现的奥秘。vector被称为动态数组,普通数组的promax版,动态扩展这一特性使得它与普通数组走上了截然不同的命运。下面我将提供其底层源码的一部分,有理有据地深入了解vector。template<typename_Tp,

C++ STL unordered_map容器如何添加元素?

为了给unordered_map容器添加元素,我们有4种方法:1. 最简洁的方式就是通过'[]',中括号内为key,通过unordered_map[key]=value的形式为容器添加元素(这里如果已存在key,则进行覆盖);2. 然后就是大家熟悉的insert(),insert()在此处既可单个插入,又能多个插入;3. emplace()直接传入参数构建,但是仅能添加单个元素;4

深入学习C++ STL list容器的迭代器

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

C++ STL deque容器如何访问元素?

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