草庐IT

c++ - C++11容器/适配器属性的实用总结/引用?

coder 2024-02-22 原文

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

我想到的属性包括:

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

我可能忘记了一些在这种情况下不要犹豫评论/编辑。

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

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

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

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

感谢您的关注。

最佳答案

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

  • 这个 reference site有一个包含所有容器的所有成员函数的大表
  • 这个 SO question具有复杂性保证的大表。
  • 这个 SO question为您提供决策树以在容器之间进行选择。

容器成员函数的复杂度要求不难记住,因为只有 4 类:(摊销)O(1)O(log N) , O(N)O(N log N) (成员函数 std::list::sort() 真正跨入标准库的算法域),因此如果您愿意,可以制作 cpp 引用容器表的 4 色编码版本。

选择正确的容器可以像使用 std::vector 一样简单,除非您的分析器表明存在瓶颈。达到这一点后,您必须在空间/时间复杂度之间做出艰难的权衡,data locality ,易于查找与易于插入/修改,与额外的不变量(排序性,唯一性,iterator invalidation rules)。

最困难的部分是您必须平衡您的容器(空间要求)与您正在使用的算法(时间要求)。容器可以保持不变量(例如 std::map 按其键排序)其他容器只能使用算法模仿(例如 std::vectorstd: :sort,但没有相同的插入复杂度)。所以在你完成容器表之后,一定要对算法做一些类似的事情!

最后,如果不提及 Boost.MultiIndex,任何容器摘要都是不完整的。 : 因为有时候你不必选择!

关于c++ - C++11容器/适配器属性的实用总结/引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16365427/

有关c++ - C++11容器/适配器属性的实用总结/引用?的更多相关文章

  1. ruby - capybara field.has_css?匹配器 - 2

    我在MiniTest::Spec和Capybara中使用以下规范:find_field('Email').must_have_css('[autofocus]')检查名为“电子邮件”的字段是否具有autofocus属性。doc说如下:has_css?(path,options={})ChecksifagivenCSSselectorisonthepageorcurrentnode.据我了解,字段“Email”是一个节点,因此调用must_have_css绝对有效!我做错了什么? 最佳答案 通过JonasNicklas得到了答案:No

  2. ruby - 在 Ruby 中编写命令行实用程序 - 2

    我想用ruby​​编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序

  3. ruby-on-rails - 如果为空或不验证数值,则使属性默认为 0 - 2

    我希望我的UserPrice模型的属性在它们为空或不验证数值时默认为0。这些属性是tax_rate、shipping_cost和price。classCreateUserPrices8,:scale=>2t.decimal:tax_rate,:precision=>8,:scale=>2t.decimal:shipping_cost,:precision=>8,:scale=>2endendend起初,我将所有3列的:default=>0放在表格中,但我不想要这样,因为它已经填充了字段,我想使用占位符。这是我的UserPrice模型:classUserPrice回答before_val

  4. ruby-on-rails - 在混合/模块中覆盖模型的属性访问器 - 2

    我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah

  5. ruby-on-rails - 如何优雅地重启 thin + nginx? - 2

    我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server

  6. ruby - 多个属性的 update_column 方法 - 2

    我有一个具有一些属性的模型:attr1、attr2和attr3。我需要在不执行回调和验证的情况下更新此属性。我找到了update_column方法,但我想同时更新三个属性。我需要这样的东西:update_columns({attr1:val1,attr2:val2,attr3:val3})代替update_column(attr1,val1)update_column(attr2,val2)update_column(attr3,val3) 最佳答案 您可以使用update_columns(attr1:val1,attr2:val2

  7. ruby - Nokogiri 剥离所有属性 - 2

    我有这个html标记:我想得到这个:我如何使用Nokogiri做到这一点? 最佳答案 require'nokogiri'doc=Nokogiri::HTML('')您可以通过xpath删除所有属性:doc.xpath('//@*').remove或者,如果您需要做一些更复杂的事情,有时使用以下方法遍历所有元素会更容易:doc.traversedo|node|node.keys.eachdo|attribute|node.deleteattributeendend 关于ruby-Nokog

  8. ruby-on-rails - Rails 模型——非持久类成员或属性? - 2

    对于Rails模型,是否可以/建议让一个类的成员不持久保存到数据库中?我想将用户最后选择的类型存储在session变量中。由于我无法从我的模型中设置session变量,我想将值存储在一个“虚拟”类成员中,该成员只是将值传递回Controller。你能有这样的类(class)成员吗? 最佳答案 将非持久属性添加到Rails模型就像任何其他Ruby类一样:classUser扩展解释:在Ruby中,所有实例变量都是私有(private)的,不需要在赋值前定义。attr_accessor创建一个setter和getter方法:classUs

  9. ruby - 一个 YAML 对象可以引用另一个吗? - 2

    我想让一个yaml对象引用另一个,如下所示:intro:"Hello,dearuser."registration:$introThanksforregistering!new_message:$introYouhaveanewmessage!上面的语法只是它如何工作的一个例子(这也是它在thiscpanmodule中的工作方式。)我正在使用标准的ruby​​yaml解析器。这可能吗? 最佳答案 一些yaml对象确实引用了其他对象:irb>require'yaml'#=>trueirb>str="hello"#=>"hello"ir

  10. ruby - 使用 `+=` 和 `send` 方法 - 2

    如何将send与+=一起使用?a=20;a.send"+=",10undefinedmethod`+='for20:Fixnuma=20;a+=10=>30 最佳答案 恐怕你不能。+=不是方法,而是语法糖。参见http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html它说Incommonwithmanyotherlanguages,Rubyhasasyntacticshortcut:a=a+2maybewrittenasa+=2.你能做的最好的事情是:

随机推荐