【发布时间】:2021-03-01 13:17:28
【问题描述】:
有没有办法查看用于实现不同数据结构的实际代码,例如 C++ 中的 list、vector、unorderd_map、map、set。
我很想看看这些实现的效率。
我很惊讶谷歌在这方面没有合理的结果。
谢谢。
【问题讨论】:
-
不是(大部分)它们只是在标题中吗?
-
因为这些是模板,并且为了实际实例化这些模板,它们的完整定义必须可见,您会惊喜地在编译器的头文件中找到“实际代码”。
-
您可以相信,这些实现比您或我编写的任何东西都更有效(和正确)。即使对于长期的专业人士来说,它们通常也完全无法阅读,并且被允许做我们凡人无法做到的事情。
-
请注意,标准库代码的编写要求与用户代码不同。特定的标准库实现将在编写时考虑到特定的体系结构或编译器,并且可能会进行仅在该上下文中有意义的优化。它还可以依赖编译器扩展,从而允许以不可移植的方式编写它,并且在某些情况下会是未定义的行为。标准库实现也使用为此目的而保留的标识符。简而言之,对从标准库代码中学到的东西要有选择性。
-
此外,您可以查看 cppreference.com 站点的“可能的实施”部分。比如这里是
std::advancepossible implementation。
标签: c++ list vector data-structures set