c ++矢量源代码

时间:2010-11-29 14:44:46

标签: c++ stl std

我正在尝试获取矢量源代码,以查看标准std或stl向量是如何实现的。

这是出于学习目的。现在问题是我在哪里可以找到源代码。 甚至其他C ++容器的源代码也很有帮助。

4 个答案:

答案 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.hhttps://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 ++标准库实现都可以自由地实现每个容器,只要它符合容器的要求。