栈、队列和优先队列的使用 1.栈的使用2.队列的使用3.优先队列的使用叫队列底层实现其实是大根堆另外push 和 emplace 的区别为前者是对已有对象插入后者可原地构造后插入。4.容器适配器可以理解为对底层数据结构进行封装提供给客户需要的接口。STL标准库中的stack 和 queue的底层结构默认都为deque。deque 是双端队列是一种双开口的“连续”空间的数据结构可以在头尾两端进行插入和删除操作时间复杂度为O(1)与 vector 比头插和删除效率高不需要移动元素扩容时也无需移动元素效率高与 list 相比空间利用率高不需要存储额外字段。deque 的缺陷是不适合遍历因为在遍历时deque 的迭代器要频繁检测其是否移动到某段小空间边界导致效率低。deque 并不连续的空间而是由一段段连续的小空间拼接而成类似一个二维数组。5.仿函数也叫函数对象行为像函数的类对象核心是类中重载函数调用运算符。仿函数对象可以保存状态可以根据对象数据的不同产生不同的行为#includeiostream class Add { public: int operator()(int x, int y)const { return x y; } }; //使用时先创建对象然后像调用函数一样调用他 int main() { Add add; int ret add(10, 20);//add.operator()(10, 20); std::cout ret std::endl; }class mycomparison { bool reverse; public: mycomparison(bool revparam false) : reverse(revparam) {} bool operator()(const int lhs, const int rhs) const { if (reverse) return lhs rhs; else return lhs rhs; } }; int main() { mycomparison cmp1; // reverse false mycomparison cmp2(true); // reverse true cmp1(10, 20); // 相当于 10 20结果为 true cmp2(10, 20); // 相当于 10 20结果为 false }