C++向量源代码

15
我试图获取向量源代码,以了解标准 std 或 stl 向量的实现方式。
这是为了学习目的。现在的问题是在哪里可以找到源代码。 其他C ++容器的源代码也有帮助。

5
观察并学习总是有好处的。但我不确定查看诸如 std::vector 这样复杂的东西的源代码是否是个好选择。当然,你可能会学到很多,但也很容易迷失方向。 - ereOn
许多STL实现将包含大量用于迭代器调试等内容的代码 - 这将很难阅读,并且包含许多与向量直接相关的代码。这可能不是学习的最佳场所。 - AshleysBrain
4个回答

16

并没有“标准”向量——标准定义了行为和接口(以及一些实现细节,如连续存储),但是代码是由编译器编写者决定的。

你的编译器应该有自己的<vector>头文件,在构建包含路径中检查过了吗?一旦找到它,您还应该在各自的头文件中看到其他STL容器。Microsoft Visual C++的列表在这里,包括一些专有的容器,请注意以下示例声明:

在Visual C++ .NET 2003中,<hash_map><hash_set>头文件的成员不再位于std命名空间中,而是已移动到stdext命名空间中。有关更多信息,请参见stdext命名空间。

在我的Visual C++ Express 2010安装中,它们位于此文件夹中:

 

c:\ program files \ microsoft visual   Studio 10.0 \ vc \ include


6
不同的运行时有不同的实现方法。但我猜这是您想要的,被广泛使用的gcc实现:https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/vector。这是主头文件,具体实现在https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/bits/stl_vector.hhttps://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/bits/stl_bvector.h中。它使用宏使代码在性能和可变情况下运行良好,但使其难以阅读,请祝您好运。

3
大多数,如果不是全部,std::vector 的源代码应该包含在 <vector> 头文件中。
标准库容器都是类模板,因此它们的定义和所有成员函数的定义都包含在其各自的头文件中。
请注意,没有任何一个容器有唯一的实现;每个 C++ 标准库实现都可以根据自己的需求实现每个容器,只要满足容器的要求即可。

3

3
你的链接现在已经失效了。 - flau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接