STL

C++ STL forward_list容器入门

就像array是vector的“轻量型”一样,list也有自己的“轻量型”——forward_list。什么是forward_list,简单来说,forward_list就是单链表,每个节点只包含一个后驱指针,如果读者忘记单链表的相关知识,可跳转《链表》补充相关知识。在C++11后,为了追求轻便高效的容器,STL大师将list“优化”为forward_list,forward_list仅支持头增头

C++ STL分区算法std::partition_point()函数入门

到目前为止,我们已经学习了3个分区算法,读者知道他们分别是什么吗?partition()函数、stable_partition()函数和partition_copy()函数,它们都能够实现分区操作。比如我们可以通过stable_partition()函数对序列{1,2,3,4,5,6,7,8,9,10}进行“奇偶切割”,原序列处理后会变成{2,4,6,8,10,1,3,5,7,9}。当我们面临一些

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

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

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

前面我们初识了set容器,本节将会详细介绍set容器的迭代器,set容器迭代器和map容器、multimap容器一样都是双向迭代器,只能进行++或--操作,不能进行随机访问。同此,set容器有正向迭代器begin()、end(),有反向迭代器rbegin()、rend(),还有常量迭代器cbegin()、cend()、crbegin()、crend(),(c表示const,可读不可改)。由于set

还有人不知道C++ STL vector容器的emplace_back()成员函数?

在前面的章节《初识STL中的vector容器》我们曾谈到vector插入元素的方法,想必大家只知道push_back()这个尾插函数吧,其实,在c++11后,vector还有一个尾插函数,那就是emplace_back(),en的意思是进入,place的意思是位置,emplace_back()就是放到最后面的意思。不是都有push_back()了吗,这么还会有emplace_back()呢?其实这

C++STL之multiset与multimap容器

C++STL之multiset与multimap容器1.MultisetMultiset是set集合容器的一种,其拥有set的全部内容,在此基础之上,multiset还具备了可以重复保存元素的功能,因此会有略微和set的差别。Multise容器在执行i……

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::copy_n()函数入门

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

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

在《初识STL库中的list容器》我们就曾明确谈到list容器是双向链表,每一个节点由两个指针和数据组成,两个指针分别指向前一个节点和后一个节点。长这样:链表属于相对简单的数据结构,我们也可以手搓一个简单链表:首先先创建一个结构体,包括数据域和指针域:structnode{intn;//数据域/*创建node指针初始值为空*/node*nex