STL

C++ STL stack容器适配器入门

栈是一种数据结构,遵循LIFO(last in first out)后进先出的原则。栈就像挤地铁一样,后上的人先出去。栈有两种行为,一个是”压栈“——push(val)或emplace(val),既插入元素,可以理解为头插法;一个是”弹栈“,既删除顶部元素,可以理解为头删法。我们可以查看栈的元素大小size(),判断栈是否为空empty()以及同类型的栈相互交换swap()。栈是一种很有趣的数据结

C++ STL list容器如何添加元素?

对于STL库中的容器来说,添加元素是一个容器最基本的要求。今天我们就来沉浸式学习为list容器添加元素。在那节《初识STL库中的list容器》(进入该页,ctrl+f5查找"插入"就能获取我们需要的函数)我们以表格的形式展示了list容器内的所有成员函数,我们可以两页并用,边查看边使用。头插尾插(push_front()、push_back()不必多说;emplace_fron

C++模板是什么?

C++模板是C++编程语言中的泛型编程工具,它允许你编写与具体数据类型无关的通用代码。简单来说,模板让你可以创建一个"代码蓝图",编译器会根据这个蓝图为不同的数据类型生成具体的代码。举个例子:在C++的世界里,有很多种数据类型,比如int(整型)、double(双精度浮点型)、float(单精度浮点型)、long long(长整型)等,为了实现各个类型的加法函数,我们一般都会这

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

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

使用vector时,千万别混淆了capacity()和size()

在vector里,不管是循环、还是查看容器内元素大小,我们都会用到size()这个常用函数来获取当前容器内元素个数(几乎所有容器都有这个size()函数来跟踪容器内元素大小)。有时我们也常常听到capacity(),这个函数意思是容量,对于不熟悉size()、capacity()的小伙伴经常将它两弄混,导致一些概念混淆问题。接下里我将向读者详细介绍它两直接的关系,毕竟能用一个变量维护的东西,干嘛会

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

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

C++ STL 流缓冲区迭代器入门

上一节我们学习了流迭代器,本节我们继续深入学习流对象的缓冲区迭代器——分别是istreambuf_iterator(从缓冲区读取字符)和ostreambuf_iterator(向缓冲区写入字符)。由于缓冲区读取数据要比流对象快,所以流缓冲区迭代器的操作效率要比流迭代器高。但在需要类型转换和数据验证的场景中,流迭代器提供了更好的安全性和便利性,读者需要明晰两者之间的区别。它们的使用方式十分“相似&q

C++ STL deque容器如何访问元素?

前面我们讨论过怎么访问vector内容器,其实deque容器访问元素方法与前者一样非常相似,都可以通过'[]'、迭代器、以及back()和front()来访问元素,不同点在于deque没有data()指针也不支持函数模板get()<T>访问,学过的3种序列式容器里只有array容器支持。原因在于函数模板get()<T>访问元素要求容器在编译时固定数组序列,d

C++ STL旋转算法std::rotate_copy()函数入门

前面一节我们学习了旋转算法 rotate() 函数,读者是否还记得它的功能是什么吗?没错,该函数能够对序列进行原地循环移位操作,该操作会物理破坏原序列完整性,如果你不想这样,读者推荐使用rotate_copy()函数。那什么是rotate_copy() 函数呢?"rotate" 意为"旋转","copy" 意为"复制"