是否有任何不属于 C++ 标准库的 STL 头文件?

Are there any STL headers which are not part of the C++ Standard Library?

我知道一些C++标准库的头文件来源于STL,比如vector。但是我找不到一个最新的 STL 头文件列表,这些头文件仍然没有被标准库合并。它们存在吗?

PS:我想列出它们,如果可能的话,我还想知道是否所有主要实现都包括它们或从哪里获得它们。

注意,这是按功能细分,而不是按 header 细分,因为它似乎更有用。

如果我们检查 SGI's documentation of the STL,我们会发现以下内容:

  1. slist 已重命名为 std::forward_list
  2. bit_vector 已替换为 std::vector<bool> 的模板规范。此实现可能(不一定)以 bit_vector 的方式针对 space 进行优化。
  3. hash_set 和朋友现在拼写为 unordered_set。功能似乎是一样的。 (感谢T.C.!)
  4. rope 缺失。标准库中没有等效的数据结构。我找不到与该主题相关的 WG21 讨论。
  5. sequence_buffer 缺失,因为这主要用于向后插入 rope
  6. random_samplerandom_sample_n 缺失。 N3547 中讨论了原因:

    After WG21 consideration at the Sophia-Antipolis meeting, Austern updated the proposal. Among other changes, he withdrew [random_sample and random_sample_n]: “The LWG was concerned that they might not be well enough understood for standardization. . . . It may be appropriate to propose those algorithms for TR2” [ Aus08b ]. The wiki minutes of the discussion are equally terse: “Bjarne feels rationale is insufficient. PJ worries we will get it wrong. Lawrence worries that people will roll their own and get it wrong. Good candidate for TR2” [ LWG08 ]. The subsequent vote regarding these proposed algorithms achieved a solid LWG consensus (10-1, 2 abs.) in favor of their future inclusion in a Technical Report (now termed a Technical Specification)

random_sample_n 算法的一个版本已进入图书馆基础 TS,称为 std::experimental::sample,提案 N3925 的最新迭代已于 2014 年 2 月通过,但仍未成为一部分标准的一部分,我想我们会在 C++17 中看到。 (谢谢T.C.!)

  1. lexicographical_compare_3way 缺失。根据N2666标准化被视为"not important enough"。
  2. power 拼写为 pow 并且不具有 power 所具有的通用功能。
  3. identityproject1stproject2ndselect1stselect2nd 从未实现标准化。我找不到关于原因的讨论。
  4. subtractive_rng 也不见了。推测是因为 <random> 会取代这个问题 space.
  5. binder1stbinder2ndptr_funpointer_to_unary_functionpointer_to_binary_functionmem_fun(和朋友)、unary_compose , 和 binary_compose 丢失或弃用。他们或多或少被 std::bind 和朋友所取代。
  6. constructdestroy 已移入 allocator class 并且不再作为独立函数存在。 (感谢T.C.!)
  7. temporary_buffer 缺失。但是 get_temporary_bufferreturn_temporary_buffer 可用。我一直无法找出确切的原因,但我所听到的 运行 的喋喋不休似乎暗示它在某种程度上已经从根本上被破坏了,而且很多人一直在尝试修复它。究竟是什么以及如何对我来说仍然是个谜。