如何知道用于实现标准代码段的确切数据结构和算法,例如在C++STL中?
How to know, the exact data structures and algorithms used to implement a standard piece of code, like in C++ STL?
我想知道堆栈是如何在C++STL中实现的,使用数组或链表,或者更复杂的东西。另外,我如何知道,任何代码的任何标准片段是如何实现的?我已经尝试过谷歌搜索和编写自定义代码来获得想法,但这非常耗时,有时第三方网站不会显示任何有用的信息。
我想知道堆栈是如何在C++STL中实现的,使用数组或链表,或者更复杂的东西。
std::stack
是一个容器适配器。它使用您提供的容器类型作为模板参数。默认情况下,它使用std::deque
.
如何知道用于实现标准代码段的确切数据结构和算法,如C++STL?
通过阅读源代码或文档(如果有(。如果两者都不可用,那么您可以询问向您出售实施的供应商。如果这也不是一个选项,你可以尝试逆向工程(假设这对你来说是合法的(,但这个选项既不容易也不快速。
尽管该标准没有明确指定用于实现标准容器的数据结构,但它们的要求非常严格,以至于实现几乎没有选择的自由。在实践中:
std::list
是用双链表实现的std::forward_list
.. 带有单向链表std::vector
.. 具有指数级增长的动态阵列- 毫不奇怪,
std::array
..带有数组 std::deque
.. 使用分段数组- 有序关联容器是平衡搜索树
- 无序关联容器是具有链式存储桶的哈希表。
std::queue
和std::stack
是按原样使用基础序列容器的容器适配器。std::priority_queue
是一个容器适配器,它在参数序列容器之上构建隐式二进制堆。std::basic_string
类似于 vector,只是它是以 null 结尾的,并且对迭代器的失效要求不那么严格,这允许实现对小型容器使用优化,其中元素存储在容器内存中而无需动态分配。
没有办法保证告诉你这些信息。#include <stack>
可能会触发为您实现std::stack
的魔术编译器设置。
但在实践中,#include <stack>
将包含一个名为stack
的文件,你可以去查看这个文件,并阅读你的特定标准库的实现。
请注意,此文件将难以阅读 - 代码首先针对正确性进行了优化,其次是性能,其次是易于阅读性。 它还必须应对用户代码可能#define
许多符号的事实,因此所有变量都可能被称为_This
相关文章:
- 为什么这个运算符<重载函数对 STL 算法不可见?
- STL算法函数在多个一维容器上的使用
- 如何在 C++17 STL 并行算法中处理调度?
- C++:尝试使用等效的 STL 算法消除原始循环
- STL算法和back_inserter可以预分配空间吗?
- 如何使用 STL 算法将整数向量转换为字符串向量?
- 如何知道用于实现标准代码段的确切数据结构和算法,例如在C++STL中?
- 是否有一种 STL 算法可以最后找到,但它也适用于指针?
- C++/STL 我应该使用哪种算法来检查容器是否有重复项?
- lower_bound() 算法/STL 使用前提条件
- C++ - 如何使用<int> <int>STL 算法功能在矢量<vector>中找到矢量?
- 如何在变量容器上使用stl算法
- 如何通过 stl 容器和算法库计算两个向量的内积?
- 在 stl 算法中移动迭代器
- 如何使用 STL 算法找到最小值和最大值?
- C STL算法相等
- 在 stl 算法中使用函数对象
- 重新定义要在字符串的 STL 算法中使用的<运算符
- 将 STL 算法与 Qt 容器结合使用
- std::list指针上排序算法的STL谓词