您需要了解的有关 STL(标准模板库)和 C++ 中用于竞争性编程的算法的所有信息,第 1 部分
在这篇博文中,我将从头开始向您讲述有关 STL 的一切,开始您的竞争性编程之旅,成为它的大师。
让我们开始吧
我们今天讨论的指南
1.什么是STL?
2. STL 的类型
3. 数组
4. 迭代器
什么是 STL?
STL 是 C++ 中预定义的模板或数据结构,可以直接在代码中使用,以增加代码的可读性。因为它在竞争性编程中发挥着巨大的作用,可以在需要时直接在代码中应用所有数据结构。现在我们将讨论一下 STL 的类型,然后直接跳到将在竞争性编程中使用的最常见的 STL。
STL 的类型
STL 有 4 种类型。
现在我只给你一个简短的预览,这些容器是关于什么的,然后我们将跳转到主题,即如何在竞争性编程中使用这些容器。
1. 顺序容器
将数据按顺序存储在容器中的容器,如 Array、Vector、dequeue、List 等。
2. 容器适配器
容器适配器是那些不仅有效地存储数据而且在元素的存储和检索过程中对其施加一些限制的容器。示例:- 堆栈、队列和 priority_queue。我们将在即将发布的博客中详细了解每一件事。
3.关联容器
关联容器仅将排序后的数据存储在其容器中,因为这些容器可以以更快、更有效的方式搜索数据,从而为您提供所需的合适输出。
示例:- Set、multiset、map 和 multimap。
4. 无序关联容器
顾名思义,没有任何顺序的容器意味着元素可以以随机顺序存储,并且不遵循严格的顺序来存储元素。由于元素是在散列的帮助下存储的,因此可以在 O(1) 时间复杂度最佳情况或 O(n) 时间复杂度最坏情况下完成搜索。
示例:- unordered_set、unordered_map、unordered_multiset、unordered_multimap。
正如我对容器类型的简要描述一样,现在我们将从如何使用这些容器的主题开始。
3. 数组
什么是数组??
数组是存储在连续内存位置的具有相似数据类型的项目的集合。
现在我们都知道数组的正常声明是
datatype arr[size];
// for exampleint arr[30];
此声明将保留内存的 30 个插槽,每个插槽为 4 个字节,因为 Integer 在内存中每个占用 4 个字节用于在内存中存储值。 内存仅在声明期间分配,因为它是静态声明。
现在来看 Array STL,它也是这样声明的,它也是一个静态声明,因为大小是固定的。
Array STL 的语法
array<datatype , size> variable_name;// for example Array<int , 30> arr;
- 如果我们最初没有在其中插入值,那么它将包含垃圾值。
- 如果我们全局声明 array<int, 30> arr,那么所有的值都会自动初始化为 0。
在阵列 STL 中执行的操作
- arr.fill(元素)
执行此操作以使用给定元素填充整个数组,当数组在本地声明时,该元素作为函数参数传递给其中,否则它将采用其中的垃圾值。
- arr.at(索引位置)
它给出在给定索引位置指定的值。
- arr.front()
它给出了数组中第一个位置的值。
- arr.back()
它给出了数组中最后一个位置的值。
- arr.size()
它给出了当前插入到数组中的元素的数量。
这都是关于数组的 现在下一个主题是迭代器,这是竞争性编程中最重要的主题。
4. 迭代器
什么是迭代器?
迭代器就像指向存储在内存中的元素的指针。 我们可以像访问指针一样访问迭代器。 大多数 STL 容器都具有使用迭代器的功能。
我们将在竞争性编程中使用 4 个迭代器:-
- begin()
- end()
- rbegin()
- rend()
begin()
此迭代器将指向所需 STL 容器中的第一个元素。
end()
此迭代器将指向容器中最后一个元素旁边的元素。 即这个迭代器将指向 STL 容器中的空/垃圾值。
这会将输出作为垃圾值提供,该值不存在于 32 的数组中。
现在要访问给定示例中为 100 的数组的最后一个元素,只需从迭代器中减去 1。
rbegin()
这个迭代器意味着反向开始,它指向存储在容器中的最后一个元素。 在此,我们不会从 arr.rbegin() 中减去 1 来获取最后一个元素。
rend ( )
此迭代器表示反向端,其功能与上面讨论的端迭代器正好相反。 它指向第一个元素下方的元素。 示例:- 如果索引 0 处的第一个元素始终存在,则此迭代器将指向索引 -1 表示容器中的垃圾/空值。 现在要访问迭代器中的第一个元素,我们必须在 arr.rend() 中添加 1 以访问容器中的第一个元素。
reverse_end 迭代器 (rend()) 工作异常?
这里它跳转到第一个元素旁边的任意值,因此我们必须执行 -1 才能获取容器中的第一个元素。
为什么会发生这种情况,我将在博客的下一部分告诉你
现在,这就是第 1 部分的全部内容,下一部分我们将讨论动态数组、出队和列表的向量。 所以请继续关注以了解更多信息。
关注七爪网,获取更多APP/小程序/网站源码资源!
如若转载,请注明出处:https://www.daxuejiayuan.com/46311.html