STL

C++ STL遍历算法std::for_each()函数入门

到目前为止,排序、合并、查找模板函数我们都已经深入接触过了,读者是否能够感受到<algorithm>算法头文件的便利之处?对于STL库给定的完美容器我们直接用,高效算法我们直接调,大大提高了我们的工作效率。本节我们将继续学习另外一个模板函数——for_each()。for_each(beg , end , op):这里表示对区间[beg , end)进行op操作,这里op既可以是普通函

C++ STL unordered_set容器入门

本节我们将进入unordered_set容器的学习。对于unordered_set容器,我们至少能够知道它的两点规则,即:1. 不会像unordered_map容器一样进行自动排序,反而由于哈希表的缘故,元素根据键被哈希函数映射到桶数组里,显得“杂乱无序”;2. 存储的元素已不再是键值对,而是“值”且不允许存在重复值,我们可以认为它键值一体,还有就是其值不能通过迭代器或成员函数修改。接下来我们将通

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

前面我们学会《如何为STL库中list添加元素?》,本节将为读者详细介绍如何删除list容器内的元素。当然,读者也可自行跳转《初识STL库中的list容器》查询list成员函数表,查找“删除”、“移除”等关键字查看具体函数,加深记忆。如今学到这里,看到删除字样,我们第一反应就要是这个pop_front()、pop_back()头删尾删,还有erase()按位置迭代器删,clear()一键全清。不同

C++ STL array容器入门

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

C++ STL迭代器适配器简介

本节我们将进入迭代器适配器的学习。迭代器适配器,顾名思义,就是自定义迭代器,在原有迭代器的基础上进行接口的约束或升级。如果读者还不知道什么是适配器的话,可自行跳转《C++ STL容器适配器简介》深入学习。对于SLT库中的所有容器,我们总共有5种迭代器,分别是前向迭代器、双向迭代器、随机访问迭代器、输入迭代器和输出迭代器。我们通常使用迭代器来进行容器的遍历和快速访问首尾元素,这里演示一下通过迭代器遍

C++ STL set容器入门

对于SLT库中的关联式容器,我们第一个学到的容器就是map,它属于有序关联式容器且只允许唯一键值存在;当允许重复键值存在时,我们就学习了multimap。今天我们开始学习set容器,set可以被视为是特殊的map,它要求键必须等于值。所以,插入时只需要放入一个元素即可,可见“键值对”的概念被隐式转换了。set最大的特点是能够自动去重和排序,其底层是红黑树实现,时间复杂度为O(log n),相比动态

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

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

C++ STL复制算法std::copy_n()函数入门

上一节我们学习了排列组合算法is_permutation()函数,读者是否还记得它的功能是什么吗?没错,该函数能够判断两个序列是否互为排列组合。本节我们将学习一个新的算法——复制算法,顾名思义,复制算法的功能就是把一个区间的元素复制到另外一个区间,它是copy_n()函数,该算法要求迭代器至少为输入迭代器。它的语法功能如下:template<classInputIt,

C++STL之Queue容器

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