【问题标题】:Are there variations in the C++ STL standard?C++ STL 标准有变化吗?
【发布时间】:2011-04-08 17:23:12
【问题描述】:

每当我使用 STL 在 C++ 中实现某些东西时,我一直虔诚地使用 SGI 的 Standard Template Library Programmer's Guide (STLPG) 作为参考手册。直到昨天它从未让我失望,但昨天我在工作中使用 std::vector 并与我的一位同事结对编程,他告诉我使用 assign方法。我没有认识到这种对我来说很不寻常的方法,所以我开始深入研究 STLPG 的 std::vector 部分,并且没有提及任何分配方法。我的同事将我指向 cpluplus.com 的 std::vector 页面,你瞧,那里还有其他一些我从未见过的方法,例如 at

这让我很困惑,所以我在这个问题上陷入了中世纪,并深入研究了 */usr/include/c++/4.1.2/bits/stl_vector.h*,这是 Hewlett-Packard Company 1994 和 Silicon Graphics Computer Systems, Inc 的版权. 1996 年,它包含了 assign 和 at 的实现,没有任何特别评论提及为什么在最近的版权所有者自己的文档中省略了它们。

有没有比我更老练的人来解释为什么会存在这些差异以及我可以相信哪个在线参考手册符合所有现代 STL 实施?

【问题讨论】:

  • std::vector 是一个 C++ 标准库组件。 STL 不同于 C++ 标准库。见this question

标签: c++ stl


【解决方案1】:

我通常使用C++ Reference,主要是因为如果您搜索c++ std vector 之类的内容,Google 会首先点击它。但我也发现那里提供的信息是准确的。

如有疑问,我会参考最新的working draft of the C++ Standard。 (例如,回答第 23.3.6 章 [vector] 的第一个问题)当然这是 C++0x,它可能还没有被完全支持,所以你可能想检查一个较旧的草稿(即 C+ 之前的最后一个草稿) +03 已发布)。

【讨论】:

  • +1:虽然我也使用 C++ Reference,但它们有时会使用误导性(或错误)示例。但是他们非常被动,并且在you warn them about it 时会修复任何错误。
【解决方案2】:

SGI 的 STL 是一个大部分包含在 ISO C++ 标准库中的库。排除了一些部分,并从其他来源添加了许多其他库组件。

而且,正如您所注意到的,我们进行了一些更改以改进或协调不同组件的接口。

更大的变化将在今年晚些时候(希望如此)出现新的 C++11 标准,直到现在称为 C++0x

【讨论】:

  • 那么我可以相信哪个在线参考手册能够与 STL 的所有现代实现兼容?
  • 现在,实际上没有。 :-( 编译器的最新版本已经开始提供 C++11 的功能,但还远未完成(正式标准),并且添加的部分因编译器而异。你 可以知道向后兼容性应该保持“旧”描述有效,但可能已经添加了新选项和组件。
【解决方案3】:

SGI STL 于 1997 年实现,C++ 标准于 1998 年发布。

如果您想要可靠的 STL 接口参考,请查找 C++ 标准 2003。或者如果您不介意升级,最新的 C++ 草案位于 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf

特别是,如果您转到 N3242,第 23.3.6 节,您就会知道有 assign 和 at。

template <class InputIterator>
void assign(InputIterator first, InputIterator last);

效果:

erase(begin(), end());
insert(begin(), first, last);

和,

void assign(size_type n, const T& t);

效果:

erase(begin(), end());
insert(begin(), n, t);

const_reference at(size_type n) const;
reference at(size_type n);

【讨论】:

    【解决方案4】:

    SGI STL 是标准中的基础,并不完全相同。很简单,自 1994 年以来已经过了很长一段时间,比如 17 年,所以在此期间,有些事情发生了变化,这是可以预料的。我个人使用 MSDN 作为我的标准库参考。

    【讨论】:

    • 根据 Matthew Austern 的《通用编程和 STL》一书,“由 Alexander Stepanov(当时在惠普)和 Meng Lee 设计的标准模板库于 1994 年被接受为 C++ 标准库的一部分. 那时还没有 SGI 实现。Austern 与 SGI 的 Stepanov 和 Boehm 合作实现了他们的 STL 版本。这项工作始于 1996 年。
    猜你喜欢
    • 2011-07-09
    • 2011-05-28
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    • 2019-12-07
    相关资源
    最近更新 更多