c++ 11容器/适配器属性的实用总结/参考
Practical summary/reference of C++11 containers/adapters properties?
我正在寻找各种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::vector
与std::sort
,但没有相同的插入复杂性)。因此,在完成容器表之后,请确保对算法执行类似的操作!
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- C++错误消息*成员参考.**初学者*
- C++概念:如何使用'concept'检查模板化结构的属性?
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- 通过指向指针数组的指针访问子类的属性
- 在决定是通过参考还是通过价值时,尺寸真的是一个问题吗
- MSVC是否支持C++11样式的属性而不是__declspec
- 参考资源文件VC++中的$(SolutionDir)
- QML:修改在不同QML文件(而非main.QML)中定义的子对象的属性
- 类的C++属性似乎已重新初始化
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- Qt Quick-如何仅从c++代码与qml属性交互
- 用概念检查属性的类型
- C++如何将同一类的实例作为属性
- 为什么在运算符重载时需要参考?
- 按多个属性排序
- 对矢量中具有常数参考属性的对象进行排序
- 从const函数返回非const属性参考
- 通过参考或指针声明属性C
- c++ 11容器/适配器属性的实用总结/参考