不同的STL容器,如vector、stack、set、queue等,支持不同的访问方法。
如果您在编写代码时使用Notepad++或vim等文本编辑器,您必须不断地参考文档以查看可用的所有方法,至少我是这样做的。
有没有什么好的方法可以记住哪个容器支持哪些方法?
不同的STL容器,如vector、stack、set、queue等,支持不同的访问方法。
如果您在编写代码时使用Notepad++或vim等文本编辑器,您必须不断地参考文档以查看可用的所有方法,至少我是这样做的。
有没有什么好的方法可以记住哪个容器支持哪些方法?
这些方法的名称不是为了不同而不同。它有助于记住哪些容器具有哪些方法,理解名称的含义。push_back
的例子在与集合相关时毫无意义。insert
在谈论堆栈时也没有任何意义(当然堆栈也没有前端或后端,因此它不支持push_back
,只支持push
)。对于向量,两者都具有明确定义的含义,因此向量同时支持insert
和push_back
。
使用它们足够多,以便记住每种方法。
或者,我强烈推荐使用带有Intellisense的真正编程IDE!Notepad++可能对于在C++中提高生产力来说太简单了。
使用内置智能感知的工具,如 Windows 上的 Visual Studio 或 Linux 上的 KDevelop。
同时,也有针对 vim 和 emacs 的智能感知插件可供选择。
虽然它不支持记忆,但可以在vim上运行某种类型的智能感知。优点是你可以从自己和外部源代码文件中创建标签。无论如何,STL需要一种特殊的处理方式,这里进行了描述。
下载这些vim-scripts OmniCppComplete 和 SuperTab。
安装OmniCppComplete:
安装SuperTab:
通过您喜欢的软件包管理器安装ctags。下载并解压缩这个file文件,然后在上面运行ctags。
$ ctags -R --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ tags_stl cpp_src
这将生成一个名为“tags_stl”的ctags文件,其中包含STL-Tags。将其复制到任何您喜欢的位置。将以下行添加到您的~/.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语句。如果你不喜欢品红色,请不要这样做。
这可能不完全符合您的需求,但是“Effective C++”的作者Scott Meyers根据Nicolai Josuttis的书《C++标准库》编制了以下STL算法清单:
了解它们是什么,以及常见的方法,然后应该很容易记住哪些适用。STL并不完全一致,但它还是相当不错的。
std::list
自带sort()
成员函数(以及为什么std::vector
没有,为什么std::map
不能排序),你就不会再忘记它们有这个功能,因为这很有道理。 - sbi