C++11 容器/适配器属性的实用总结/参考? [关闭]

2024-06-19

我正在寻找各种 C++11 标准容器和容器适配器的重要属性的全面总结/参考(也可以选择包括 boost/Qt),但是按这些属性索引而不是通常的每个容器文档(更多内容见下文)。

我脑海中想到的属性包括:

  • 插入功能(正面/背面/任意)。
  • 移除能力(正面/背面/任意)。
  • 访问能力(前/后/单向/双向遍历/随机访问)。
  • 上述操作的复杂性以及迭代器失效规则。
  • 独特性?订购了?联想?连续存储?提前预约吗?

I may have forgotten some in which case don't hesitate to comment/edit.

目标是使用该文档作为帮助来为正确的工作选择正确的容器/适配器,而不必每次都费力地浏览各种单独的文档(我的记忆力很差)。

理想情况下,它应该按属性和容器类型(例如表格)进行索引,以允许决策以及基本约束的快速参考。但实际上每个属性索引对我来说是最重要的,因为这是在文档中搜索最痛苦的。

如果没有人制作过这样的文档,我会感到非常惊讶,但我的搜索功能在这方面让我失败了。

NOTE:我并不是要求您总结所有这些信息(如果确实需要的话,我会自己做,在这种情况下,我会将结果发布在这里),但前提是您碰巧知道existing符合这些要求的文件。某物像这样 http://en.cppreference.com/w/cpp/container#Member_function_table是一个好的开始,但正如您所看到的,它仍然缺乏我想要的许多信息,因为它仅限于成员函数。

感谢您的关注。


我不知道有哪个文档可以提供您所需的一切,但其中大部分已在某处编目。

  • This 参考站点 http://en.cppreference.com/w/cpp/container有一张大桌子,里面有所有的东西成员函数所有容器的
  • This 所以问题 https://stackoverflow.com/questions/181693/what-are-the-complexity-guarantees-of-the-standard-containers有一张大桌子复杂性保证.
  • This 所以问题 https://stackoverflow.com/questions/471432/in-which-scenario-do-i-use-a-particular-stl-container给你一个决策树在容器之间进行选择。

容器成员函数的复杂性要求并不难记,因为只有 4 类:(摊销)O(1), O(log N), O(N), and O(N log N)(成员函数std::list::sort()它确实跨入了标准库的算法领域),因此如果您愿意,您可以制作 cpp 参考容器表的 4 色编码版本。

选择正确的容器就像经常使用一样简单std::vector除非你的分析器表明存在瓶颈。达到这一点后,您必须在空间/时间复杂度之间做出艰难的权衡,数据局部性 https://stackoverflow.com/questions/13174339/vector-vs-list-according-to-stroustrup,易于查找与易于插入/修改,与额外的不变量(排序性,唯一性,迭代器失效规则 https://stackoverflow.com/questions/6438086/iterator-invalidation-rules).

最困难的部分是您必须平衡容器(空间要求)和您正在使用的算法(时间要求)。容器可以维护不变量(例如std::map按其键排序),其他容器只能使用算法来模仿(例如std::vector with std::sort,但没有相同的插入复杂性)。因此,在完成容器表后,请确保对算法执行类似的操作!

最后,如果不提及,容器摘要就不完整增强多索引 http://www.boost.org/doc/libs/1_53_0/libs/multi_index/doc/index.html: 因为有时候你不必选择!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++11 容器/适配器属性的实用总结/参考? [关闭] 的相关文章

随机推荐