c++ 11容器/适配器属性的实用总结/参考

Practical summary/reference of C++11 containers/adapters properties?

本文关键字:参考 属性 容器 适配器 c++      更新时间:2023-10-16

我正在寻找各种c++ 11标准容器和容器适配器(可选地还包括boost/Qt)的重要属性的综合摘要/参考,但是由这些属性索引而不是通常的每个容器文档(下面有更多信息)。

我想到的属性包括:

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

我可能忘记了一些,如果是这样的话,请不要犹豫,评论/编辑。

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

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

如果没有人制作过这样的文档,我会感到非常惊讶,但是我的Search-fu在这方面失败了。

注意:我不是要求你总结所有这些信息(如果我真的有必要,我会自己做,在这种情况下,我将在这里发布结果),但只有当你碰巧知道一个现有的文档符合这些要求。像这样的东西是一个良好的开始,但正如您所看到的,它仍然缺乏我想要的许多信息,因为它仅限于成员函数。

我不知道有哪一份文档能提供你所需要的一切,但其中大部分已经在某个地方编目了。

  • 这个参考站点有一个包含所有容器的成员函数的大表
  • 这个SO问题有一个大表的复杂度保证
  • 这个问题给了你一个决策树来选择容器。

容器成员函数的复杂性要求并不太难记忆,因为只有4个类别:(平销)O(1), O(log N), O(N)O(N log N)(成员函数std::list::sort()实际上跨越了标准库的算法领域),所以如果你愿意,你可以制作一个四色编码版本的cpp引用容器表。

选择正确的容器可以像始终使用std::vector一样简单,除非您的分析器指出瓶颈。在达到这一点之后,您必须在空间/时间复杂性、数据局部性、查找的便利性与插入/修改的便利性以及额外的不变量(排序性、唯一性、迭代器无效规则)之间做出艰难的权衡。

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

最后,如果不提到Boost,任何容器总结都是不完整的。MultiIndex:因为有时候你不需要选择!