STL

C++ STL 排序算法std::stable_sort()函数入门

前面我们已经学习了sort()排序,本节我么将继续学习STL库提供的其他排序算法函数模板——stable_sort()。“stable”意为稳定,那么我们这个stable_sort()和之前学习过的排序算法sort()有什么区别呢,”稳定“之处在哪?原来,如果出现相同元素彼此紧邻,比如{1,2,3,3,3,4,5,3},我们其实只需要把最后一个‘3’前移即可,但是sort()奉行极致效率,不会浪费

C++ STL unordered_map容器入门

本节我们开始学习unordered_map容器。从功能上看,对比map容器,unordered_map容器既能够通过'[]'访问元素,又能够通过at()成员函数访问元素,同时还保证键值存在的唯一性,与map容器极为“相似”,唯一不同点就是unordered_map容器没有按键(key)进行自动排序;从结构上看,对比map容器,两者又是完全不一样的独立存在,map容器底层基于红黑树,

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

前面我们学习的查找算法都是单个元素进行查找,本节我们学习一个按序列进行查找的算法——find_end()。find_end(first1,last1,first2,last2)的功能是在主序列[first1,last1)中寻找最后一次出现的子序列[first2,last2),如果找到就返回最后一次出现在主序列中的子序列的起始迭代器;如果找不到就主序列的last1迭代器。举个例子,主序列是{&#39

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

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

C++ STL stack容器适配器入门

栈是一种数据结构,遵循LIFO(last in first out)后进先出的原则。栈就像挤地铁一样,后上的人先出去。栈有两种行为,一个是”压栈“——push(val)或emplace(val),既插入元素,可以理解为头插法;一个是”弹栈“,既删除顶部元素,可以理解为头删法。我们可以查看栈的元素大小size(),判断栈是否为空empty()以及同类型的栈相互交换swap()。栈是一种很有趣的数据结

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

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

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

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

C++ STL 流缓冲区迭代器入门

上一节我们学习了流迭代器,本节我们继续深入学习流对象的缓冲区迭代器——分别是istreambuf_iterator(从缓冲区读取字符)和ostreambuf_iterator(向缓冲区写入字符)。由于缓冲区读取数据要比流对象快,所以流缓冲区迭代器的操作效率要比流迭代器高。但在需要类型转换和数据验证的场景中,流迭代器提供了更好的安全性和便利性,读者需要明晰两者之间的区别。它们的使用方式十分“相似&q

C++ STL二分查找std::binary_search()函数入门

前面一节我们学习了equal_range()函数,该函数的功能是在指定有序区间内查找第一个高于目标元素的元素。本节我们开始学习新的二分查找函数——binary_search()函数。“binary”意为“二分的”,“search”意为“查找”,binary_search()函数的功能是在指定有序范围内判断是否存在目标元素。binary_search()函数的语法格式为:/*查找[fir