我正在尝试获取矢量源代码,以查看标准std或stl向量是如何实现的。
这是出于学习目的。现在问题是我在哪里可以找到源代码。 甚至其他C ++容器的源代码也很有帮助。
答案 0 :(得分:10)
没有“标准”向量 - 标准定义了行为和接口(以及一些实现细节,例如连续存储),但代码是编译器编写者要确定的问题。
您的编译器应该有自己的<vector>
头文件,您是否在构建包含路径中检查了这个?一旦发现您还应该在各自的标题中看到其他STL容器。 Microsoft Visual C ++的列表是here,包括一些专有的,所以请注意以下示例免责声明:
在Visual C ++ .NET 2003中,成员
<hash_map>
和<hash_set>
标题 文件不再在标准中 命名空间,而是被移动了 进入stdext命名空间。请参见stdext 命名空间以获取更多信息。
在我安装Visual C ++ Express 2010时,它们位于以下文件夹中:
c:\ program files \ microsoft visual Studio 10.0 \ vc \ include
答案 1 :(得分:5)
不同的运行时具有不同的实现。
但我想这就是你想要的,广泛使用的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.h 和 https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/bits/stl_bvector.h
它使用MACRO使代码以良好的性能运行并适应多变的情况,但是难以阅读,祝你好运。
答案 2 :(得分:4)
答案 3 :(得分:3)
大多数(如果不是全部)std::vector
源代码都应该包含在<vector>
标头本身中。
标准库容器都是类模板,因此,它们的定义和所有成员函数的定义都包含在各自的标题中。
请注意,任何容器都没有One True Implementation;只要符合容器的要求,每个C ++标准库实现都可以自由地实现每个容器,只要它符合容器的要求。