STL

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

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

C++ STL unordered_map容器如何删除元素?

学到这里,我们已经掌握unordered_map容器的基本知识了,增、改、查,但还没有学过删。本节将继续带领读者一起学习如何为unordered_map容器删除元素。erase()是删除unordered_map容器内元素的主要函数,这里通过代码简单介绍如何通过erase()删除元素:#include<iomanip>#include<iostream>#i

C++ STL工具函数std::move()函数入门

前面一节我们学习了旋转复制算法 rotate_copy() 函数,读者是否还记得它的功能是什么吗?没错,该函数能够在保持原序列不变的前提下生成旋转后的副本。本节我们将学习一个工具算法——move() 函数。"move" 意为"移动",从名称就能看出,这个函数用于将元素从一个位置移动到另一个位置,主要应用于批量高效移动复杂对象。move() 函数的语法格式如下

C++ STL序列查找算法std::search_n()函数入门

上一节我们学习了序列查找算法search()函数,本节我们将继续学习序列查找算法——search_n()函数。我们知道,search()函数的功能是找寻主序列里第一次出现子序列的位置,那么这个search_n()函数到底有什么功能呢?“n”有“几个的意思”,search_n()函数的功能是在一个主序列中找寻第一次出现的n个连续且相等元素,类比search()函数的话就相当于是子序列变成了常量序列(

C++STL之Queue容器

C++STL之Queue容器1.再谈队列回顾一下之前所学的队列,队列和栈不同,队列是一种先进先出的数据结构,STL的队列内容极其重要,虽然内容较少但是请务必掌握,STL的队列是快速构建搜索算法以及相关的数论图论的状态存储的基础。……

C++ STL有序关联式容器如何更改排序规则?

到目前为止,我们已经把有序关联式容器全部学习完了,读者是否能够完整地枚举它们并清晰地区分它们呢?它们分别是:map容器、multimap容器、set容器和multiset容器。它们都有一个共同的特点,就是能够在元素插入时按照默认的排序规则将键(key)排序(默认都是升序排序),那么如何更改有序关联式容器的排序规则呢?对于这个问题,我推荐使用仿函数来实现。什么是仿函数,读者心里可能一头雾水。简单来说

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

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

C++ STL迭代器辅助函数distance()入门

本节我们将继续进行第二个迭代器函数distance(first , last)的学习。同样,在使用迭代器函数时,我们需要第一时间包含头文件<iterator>。“distance”,意为“距离”,它返回的是两个同类型迭代器的相对距离,其区间为[first , last)。该函数适用前向迭代器、随机迭代器、双向迭代器以及输入迭代器。下面,让我们通过代码的方式来学习distance(fir

C++ STL是什么?

在大家已经掌握了 C++ 基础知识,特别是理解了模板这一强大的泛型编程工具之后,我们将开启一个至关重要的新篇章:系统性地学习STL(标准模板库)。作为 C++ 程序员进阶的必经之路,我们首先要从根本上理解两个核心问题:STL 究竟是什么?以及,投入精力去学习它究竟能为我们带来哪些实际的价值?什么是STL?STL,全称为Standard Template Library,中文

C++ STL priority_queue如何更改堆顶元素选取规则?

上一节我们提到,在优先队列容器里,堆顶元素不一定是像字面意思一样是权值最”大“的值,就像1大于0一样,通过仿函数,我们能够更改规则,让这个”大“朝着相反的方向出发,实现”0>1"。如果读者还是第一次听过仿函数这个词的话也没关系,它就相当于类重载了函数调用符'()',把类当函数使就好了。值得注意的是,在更改规则时需要我们指定优先队列的适配容器,否则无法使用仿函数。下面