STL

深度剖析C++ STL priority_queue适配器底层的堆结构

在《C++ STL priority_queue适配器入门》我们就曾提到优先队列的底层结构是堆,具体是二叉堆,这个二叉堆可以类比二叉树进行学习。可能有读者存疑了,本章不是在学习容器适配器吗,怎么会谈到底层结构呢,这么说优先队列底层到底是堆还是vector容器还是deque容器呢?其实,结构和容器是两个完全不同的概念,但是它们可以组合在一起!就适配容器而言,优先队列采用vector容器或deque容

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

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

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

学到这里,我们已经掌握map容器的基本知识了,增、改、查,但还没有学过删。本节将继续带领读者一起学习如何为map容器删除元素。erase()是删除map容器内元素的主要函数,这里通过代码简单介绍如何通过erase()删除元素:#include<iomanip>#include<iostream>#include<map>#inclu

C++ STL deque容器入门

前面我们已经接触到array、vector容器,掌握里一定的基础。现在我们开始进行deque容器的学习。duque,double-ended queue,意思就是双端队列,该容器首尾都能够进行增删元素操作且其时间复杂度为O(1)。deque底层是中控区+缓冲区,可以理解为通过指针链接数组块。deque与vector极其相似,下面展示其所有成员函数:类别成员函数函数签名说明元素访问atreferen

C++ STL 排序算法std::partial_sort()函数入门

partial_sort(first , middle , last)排序算法模板函数,”partial“意为”部分“,该排序算法指的是在指定区间[first , last)按排序规则找出前(middle-first)个元素并存放进排序区间[first , middle)中。使用partial_sort(first , middle , last)时需要包含头文件<algorithm>

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

前面我们基本了解了unordered_map容器,接下来我们开始学习unordered_map容器的迭代器。由于哈希表的缘故,元素根据键(key)被哈希函数分配到不同的地址,导致元素间地址不连续,所以unordered_map容器的迭代器和同我们之前学过的map容器、set容器的迭代器不一样,它没有”顺序“这个概念,属于前向迭代器,只能通过++的操作而不能通过--的方式访问元素,不支持+8或-3等

C++ STL deque容器如何增删元素?

前面我们已经充分了解deque的基本知识以及访问方式,本节将一口气为读者详细介绍如何对deque进行增删操作,加快我们的学习进度。这里可以类比vector的增删操作,《vector容器怎么在指定位置前插入元素?》、《vector容器怎么删除元素呢?》,读者通过对比学习,总结归纳出自己的宝贵经验,提高对STL容器的掌控力。我们先谈谈“增”这个操作:对比vector,我们都知道deque能够实现头增尾

为什么说C++ STL是C/C++程序员的基本功?

对于C++程序员来说,熟练使用STL库是最基本的技能,尤其是在企业招聘的时候,招聘要求都会明确声明熟练运用STL库,因为这直接关系到开发效率、代码质量与程序性能。企业将STL掌握程度视为评估候选人专业素养的核心指标:初级水平要求能准确选用容器和算法完成业务逻辑;中级水平则必须理解底层机制,如vector扩容代价、迭代器失效原因,并能进行性能优化;高级水平更进一步,需能结合智能指针、移动

C++ STL stack适配器实现计算器

利用栈先入先出这种”对称性“,我们可以自己做一个计算器(支持'+'、'-'、'*'、'/'、'^'、'()')。主要思路是维护运算栈的单调递增,运算栈的单调递增指的是完全保持从左到右由低到高的运算顺序,维护同级运算符,避免“头重脚轻”,运算错误。比如我们要计算“1+2-3/4^5-6",从人的

C++ STL比较算法std::equal()函数入门

上一节我们学习了一元谓词判断算法,读者是否还记得他们分别是什么吗?没错,它们分别是all_of()函数、any_of()函数、none_of()函数,其中all_of()函数为”全称判断“,any_of()函数为”存在判断“,none_of()函数为”全否判断“。本节我们将学习新的算法——比较算法,那什么有时比较算法呢?就像字符串比较一样,比我我们有两个字符串s1和s2:strings