STL

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

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

C++ STL 反向迭代器适配器入门

反向迭代器适配器,又被称为反向迭代器或逆向迭代器(往后统一“反向迭代器”命名),顾名思义,就是用来逆序输出元素的。读者请牢牢记住,反向迭代器适配器的适配迭代器要么是双向迭代器,要么是随机迭代器,绝不可能是前向迭代器!其原因也可想而知,适配器只是对现有现有功能进行包装,无法为底层迭代器添加原本不支持的操作,比如forward_list这种前向迭代器,它原本就不支持--操作,就别指望forward_l

C++ STL填充算法std::generate()函数入门

前面一节我们学习了填充算法fill()函数和fill_n()函数,读者是否还记得它们的功能分别是什么吗?没错,fill()函数能对指定序列填充目标元素,fill_n()函数能够指定填充元素的个数。本节我们将继续学习填充算法——generate()函数,”generate“意为“生产”,顾名思义,generate()函数能够通过生成器函数为序列中的每个元素赋值。generate()函数的语法格式如下

C++ STL排列组合算法std::is_permutation()函数入门

上一节我们学习了排列组合算法——prev_permutation()函数,读者是否还记得它的功能是什么吗?没错,该函数以降序排序作为起点,生成上一个更小排列。本节我们将学习判断是否为排列组合算法——is_permutation()函数。"permutation"表示"置换",这里is_permutation()函数的功能是否互为彼此的排列组合,比如我们有两个

C++ STL区间交换算法std::swap_ranges()函数入门

前面一节我们学习了工具函数move() 函数,读者是否还记得它的功能是什么吗?没错,该函数能够高效地移动对象资源,同时源位置的元素会被置于有效但未指定的状态。本节我们将学习一个新的算法——区间交换算法,顾名思义,区间交换算法就是高效交换两个同类型且等长的区间。swap_ranges() 函数就是一个重要的区间交换算法,"swap" 意为"交换","

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

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

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

上一节我们学习了partitioin()函数和stable_partition()函数,读者是否能够记起它们的功能以及对他们进行区分呢?本节我们将继续进行分区算法——partition_copy()函数的学习。该函数与前面两个函数大不相同,究其根本是partition_copy()函数能够保证不破破坏原序列,并且把分区后的元素复制到新的两个序列里。比如原序列是{1,2,3,4,5,6,7,8,9,

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

前面一节我们学习了复制算法copy_n()函数,读者是否还记得它的功能是什么吗?没错,该函数能够从指定位置开始复制固定数量的元素到目标区域。本节我们将学习一个更智能的复制算法——条件复制算法copy_if()函数。从名称就能看出,这个函数在复制时会进行条件筛选,只复制满足特定条件的元素。copy_if()函数的语法格式如下:template<classInputIt,

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

本节我们将继续进行序列查找的学习——adjacent_find()函数。“adjacent”的意思是“相邻的”,adjacent_find(beg , end)函数的功能是:用于在序列[beg , end)中查找第一对相邻元素,这两个元素满足特定条件(默认是绝对相等),有返回值,如果找到第一对相邻相等元素,则返回指向该对元素的第一个元素的迭代器;否则返回容器的end()。它的函数模型是://查找&