【问题标题】:C++ STL containersC++ STL 容器
【发布时间】:2011-02-07 02:16:27
【问题描述】:

vectorstacksetqueue等不同的STL容器支持不同的访问方式.

例如,如果您在 Notepad++vim 中进行编码,则必须不断参考文档以查看所有可用的方法,至少我必须这样做。

有什么好的方法可以记住哪个容器支持哪些方法?

【问题讨论】:

  • 经常使用它们,你的手指就会记住它们。
  • @cambr 拥有良好的记忆力是程序员的首要条件之一,恕我直言。
  • 您究竟在寻找什么?你可以唱什么歌来记住东西?就像其他一切一样,您可以通过经验学习它。或者使用现代 IDE。
  • 我不同意每个人都说你必须记住它们。这太疯狂了,他们太多了。但我同意每个人所说的疯狂中有一个系统。真的,这才是关键!一旦你了解为什么 std::list 带有它自己的 sort() 成员函数(以及为什么 std::vector 没有,以及为什么 std::map 根本无法排序),你就不会会再次忘记它确实(他们确实),因为它是有道理的。
  • 或者把你的IDE换成Eclipse CDT,会弹出所有成员

标签: c++ stl methods containers


【解决方案1】:

使用内置 intellisense 的软件,例如 Windows 上的 Visual Studio 或 Linux 上的 KDevelop。

还有用于 vim 和 emacs 的 intellisense 附加组件。

【讨论】:

  • @Brian R. Bondy 你的意思是没有办法轻松记住这些?我真的不想使用智能感知功能。
  • @cambr:在这种情况下,随着您使用的次数越多,您会自动记住它们。
  • 当你说“我真的不想使用智能感知功能”时,我们读到的都是“我真的不想成为更高效的程序员”。
  • @Alan 我想你的意思是@cambr。
【解决方案2】:

充分使用它们,以便您记住每个方法。

【讨论】:

    【解决方案3】:

    如果您的记忆总是失败,请尝试将a reference of them all 保持在另一个窗口中。如果您有多个显示器,真的在第二个显示器上放置这样的东西(用于任何类型的文档)非常方便。

    另外,我强烈推荐一个真正的带有智能感知的编码 IDE! Notepad++ 可能过于简单,无法在 C++ 中高效工作。

    【讨论】:

      【解决方案4】:

      这可能不是您正在寻找的,但 Scott Meyers(以“Effective C++”闻名)根据 Nicolai Josuttis 的书“C++ 标准库”编译了以下 STL 算法列表:

      Josuttis’ Summary of STL Algorithms

      【讨论】:

        【解决方案5】:

        了解它们是什么以及常用方法,然后应该很容易记住哪些适用。 STL 并不完全一致,但已经相当不错了。

        【讨论】:

          【解决方案6】:

          方法的名称不是为了不同而不同。它有助于记住哪些容器有哪些方法,以理解名称的含义。例如,push_back 与集合无关。 insert 在谈论堆栈时没有任何意义(当然堆栈也没有正面或背面,因此它不支持push_back,仅支持push)。对于vector来说,两者都有明确的含义,所以vector同时支持insertpush_back

          【讨论】:

          • stackqueuepriority_queue 首先不是容器(它们是具有非常小的接口的容器适配器):)
          【解决方案7】:

          承认它不支持记住你可以在 vim 上运行某种智能感知。优点是您可以从自己的和外部的源代码文件创建标签。无论如何,STL 需要特殊处理,此处描述。

          下载这些 vim 脚本 OmniCppCompleteSuperTab

          安装 OmniCppComplete:

          • 将插件解压到~/.vim。

          安装 SuperTab:

          • 在 vim 中打开文件 ($ vim supertab.vba)。
          • 来源文件 (:so %)。

          通过您最喜欢的包管理器安装ctags。下载并解压此file 并在其上运行 ctags。

          $ ctags -R --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ tags_stl cpp_src 
          

          这将生成一个名为“tags_stl”的 ctags 文件,其中包含 STL 标记。把它复制到你喜欢的任何地方。将以下不存在的行添加到您的 ~/.vimrc:

          set tags+=~/path/to/your/tags_stl  
          filetype on  
          filetype plugin on  
          let OmniCpp_GlobalScopeSearch=1  
          let OmniCpp_NamespaceSearch=2  
          let OmniCpp_MayCompleteDot=1  
          let OmniCpp_MayCompleteArrow=1  
          let OmniCpp_MayCompleteScope=1  
          let OmniCpp_DisplayMode=1  
          let OmniCpp_DefaultNamespaces=["std"]
          

          即使在“使用命名空间 std;”时,这也会完成关于“tab”、“.”、“::”和“->”的 STL 语句。如果您讨厌洋红色,请不要这样做。

          【讨论】:

            【解决方案8】:

            即使你记得所有的“方法”,那也只是故事的一部分。要有效地使用 STL,您还需要了解算法。我建议在一本好书(Stroustrup、Josuttis 等)中阅读有关 STL 的内容,以记住可用的内容,然后在需要确切语法时返回书籍或打开参考站点。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2023-03-27
              • 1970-01-01
              • 1970-01-01
              • 2016-01-13
              • 2014-02-03
              • 2014-07-19
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多