一、优先队列与堆
1.1概念
1.2第k个元素
仿函数:
**仿函数(Functor)是一种通过重载operator()运算符的类或结构体,调用使得对象可以像函数一样被**。在C++编程中,仿函数不仅增添了编程的灵活性和功能的强大性,而且在标准模板库(STL)中的算法实现里占有重要地位。
部分C++的初学者可能对仿函数这一概念感到陌生,但实际上,如果他们使用过STL中的一些算法,或许已经不知不觉中使用了预定义的仿函数。从本质上讲,仿函数是一个类或者结构体,它重载了函数调用运算符operator(),使得对象可以像函数那样被调用。仿函数通常用于STL算法中,作为排序规则、操作函数、比较函数等,其作用范围相当广泛。
与普通函数相比,仿函数具有维护状态的能力。仿函数可以持有状态,并在每次调用时依据这些状态改变其行为。例如,可以创建一个计数器仿函数,记录它被调用的次数。由于仿函数是通过对象调用的,编译器可以优化其内联调用,从而减少调用开销。高度可定制的行为也是仿函数的一个优势,可以通过对象的属性来调整其行为。
仿函数的概念虽然简单,但其在实际使用中的模式和示例是多种多样的。例如,可以结合模板使用仿函数,以处理不确定类型的情况。仿函数还可以作为STL算法的比较函数,如用于std::sort的比较函数,用以对整数向量进行排序。另外,仿函数还可以作为算法的操作函数,存储状态或属性,使行为可定制。
反向迭代器:
在计算机编程中,**反向迭代器是一种支持反向遍历容器元素的迭代器**。
在现代C++编程中,反向迭代器不仅提供了从后向前遍历数据结构的简便方法,而且还与C++标准模板库(STL)中的算法和函数完美集成,使得它们可以直接应用于反向范围,为各种编程需求提供灵活、高效的解决方案。