我知道一些C ++标准库头文件来自STL,例如vector
。但是我没有找到标准库未包含的最新STL标题列表。它们存在吗?
PS:我想列出它们,并且如果可能的话,还要知道所有主要实现是否包含它们或在何处获取它们。
答案 0 :(得分:10)
注意,这是一个按功能分解的功能,而不是按标题分解,因为它似乎更有用。
如果我们检查SGI's documentation of the STL,我们会发现以下内容:
slist
已重命名为std::forward_list
。bit_vector
已被std::vector<bool>
的模板规范所取代。这种实现可能(不一定)以bit_vector
的方式优化空间。hash_set
和朋友现在拼写为unordered_set
。功能似乎是一样的。 (谢谢T.C。!)rope
丢失了。标准库中没有等效的数据结构。我无法找到关于该主题的相关WG21讨论。sequence_buffer
缺失,因为这主要用于重新插入rope
。random_sample
和random_sample_n
丢失了。原因在N3547中讨论过:
在索菲亚 - 安提波利斯会议上考虑WG21后,Austern更新了该提案。 在其他变化中,他撤回了[
random_sample
和random_sample_n
]:“LWG担心他们可能对标准化不太了解。 。 。 。建议可能是适当的 TR2的那些算法“[ Aus08b ]。讨论的维基会议记录同样简洁:“Bjarne 感觉理由不充分。 PJ担心我们会弄错。劳伦斯担心人们会 滚动自己,弄错了。 TR2的好候选人“[ LWG08 ]。随后的投票有关 这些提出的算法实现了稳固的LWG共识(10-1,2 abs),有利于他们的未来 纳入技术报告(现称为技术规范)
random_sample_n
算法的一个版本已经进入了库基础知识TS并被称为std::experimental::sample
,提案N3925的最新版本在2014 - 02年被采用但尚未成为其中的一部分。标准,我想我们将在C ++ 17中看到。 (谢谢T.C。!)
lexicographical_compare_3way
丢失了。根据N2666标准化被认为“不够重要”。power
的拼写为pow
,并且没有power
所做的通用功能。identity
,project1st
,project2nd
,select1st
和select2nd
从未进行过标准化。我找不到关于原因的讨论。subtractive_rng
也不见了。推定,因为<random>
将取代这个问题空间。binder1st
,binder2nd
,ptr_fun
,pointer_to_unary_function
,pointer_to_binary_function
,mem_fun
(以及朋友),unary_compose
和binary_compose
已丢失或已弃用。它们或多或少被std::bind
和朋友取代。construct
和destroy
已移至allocator
类,并不作为独立函数存在。 (谢谢T.C。!)temporary_buffer
丢失了。但get_temporary_buffer
和return_temporary_buffer
可用。我一直无法找到确切的原因,但是我遇到的喋喋不休似乎暗示它在某种程度上已经被打破,并且很多人一直试图修复它。对我来说究竟是什么以及如何仍然是一个谜。