STL

C++ STL multimap容器入门

在掌握map容器的基础下,我们开始multimap容器的学习。为什么要求有map的基础呢,原因在于multimap与map容器十分“相似”,不同点在于map只允许存在唯一键,而multimap能够存储重复键,在理解map的基础上对比归纳这两个容器,能够对序列式容器有个宏观的视角,提高对容器的掌控力。如果读者没有map容器的基础,可跳转《初识模板类pair》开始map容器的学习。由于multimap

C++ STL按条件查找算法std::find_if()函数入门

前面我们学过查找函数find(beg,end,val),本节我们将继续学习与其功能类似的函数——find_if()函数。find_if(beg , end ,pred),它的功能是在区间[beg , end)找到第一个满足pred条件的第一个元素,并返回指向该元素的迭代器;如果没有找到这个元素,则会返回end()。find_if(beg , end ,pred)中的"pred"

C++ STL 流迭代器适配器入门

流迭代器适配器,指的是将输入输出流当作迭代器来使用,分两种:istream_iterator用于写入流对象;ostream_iterator用于读取流对象。流迭代器的目的是让流对象适配容器,桥接算法以实现声明式的数据管理通道。那什么是流对象呢?读者可能还不熟悉这个名词。其实,我们从一开始接触编程的时候就学过流对象了!读者还记得”cout<<"Hello World!&quot

C++STL之Vector容器

C++STL之Vector容器1.概念Vector可以翻译为向量,或向量数组,至于为什么以向量命名,可以理解为一维空间也是存在向量的。Vector是最简单的序列是容器,就像数组一样,向量使用连续的存储位置作为元素,这意味着它们的元……

C++ STL list容器入门

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

C++ STL array容器入门

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

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

到目前为止,我们已经把主要的排序模板函数讲完了,读者还记得有哪些吗?这里笔者通过表格向读者展示一下,希望读者对这些排序模板函数有基本掌握。函数名功能sort对指定范围内的元素进行通用、高效的排序。不保证相等元素的原始相对顺序。通常使用内省排序(快速排序+堆排序),平均和最优时间复杂度为O(N log N)。stable_sort对指定范围内的元素进行稳定排序。保证相等元素在排序后的相对顺序与其在原

C++ STL priority_queue适配器入门

priority_queue适配器,又被称为“优先队列”,priority意为“优先权”,这里的priority指的是适配器会将所有元素中权值最高的元素置于顶部(默认是权值最高,但是我们可以通过仿函数来更改规则),以展现优先级。同时优先队列没有FIFO(先入先出)这个规则,插入元素是通过push(),删除元素是通过pop(),不能进行随机元素访问,能且仅能操作堆顶元素top(),同队列相比有很大的

C++ STL vector容器冗余大量空间,你会怎么做?

在上一节里我们讨论了通过reserve()这个成员函数去预存空间,避免“动态扩展行为”来影响效率。如果还有读者不知道这个小技巧的,可自行跳转《vector性能优化小技巧》。如果说预存reserve()是“增”,那么肯定会有“减”这个概念。在实际上工作中,当我们发现vector预存的空间太大,远远高于需求时,我们就需要“减”的这个操作,将闲置空间释放提供更多的内存。此操作我有两个方法,分别是通过sw

C++ STL转换算法std::transform()函数入门

前面一节我们学习了填充算法 generate() 函数和 generate_n() 函数,读者是否还记得它们的功能分别是什么吗?没错,generate() 函数能通过生成器为序列中的每个元素赋值,generate_n() 函数能够从指定位置开始为指定个数的元素重新赋值。本节我们将学习一个转换算法——transform() 函数,"transform" 意为"转换&qu