C ++ STL контейнеры - PullRequest
       53

C ++ STL контейнеры

7 голосов
/ 12 апреля 2010

Различные контейнеры STL, такие как vector , stack , set , queue и т. Д., Поддерживают различные методы доступа к ним.

Если вы кодируете, например, в Notepad ++ или vim , вам необходимо постоянно обращаться к документации, чтобы узнать, какие доступны все методы, по крайней мере, мне нужно.

Есть ли какой-нибудь хороший способ запомнить, какой контейнер поддерживает какие методы ??

Ответы [ 8 ]

12 голосов
/ 12 апреля 2010

Имена методов не различаются ради отличия. Это помогает запомнить, какие контейнеры имеют какие методы, чтобы понять значение имени. push_back например, бессмысленно по отношению к множествам. insert не имеет никакого смысла, когда речь идет о стеках (конечно, у стеков нет ни передней, ни задней сторон, поэтому он не поддерживает push_back, просто push). Для вектора оба имеют четкое значение, поэтому вектор поддерживает как insert, так и push_back.

5 голосов
/ 12 апреля 2010

Используйте их достаточно, чтобы запомнить методы каждого из них.

4 голосов
/ 12 апреля 2010

Если ваша память продолжает отказывать вам, попробуйте сохранить ссылку на них всех в другом окне. Если у вас более одного монитора, действительно удобно иметь подобные вещи на втором мониторе (для любой документации).

В качестве альтернативы, я настоятельно рекомендую реальную среду разработки с IntelliSense! Notepad ++, вероятно, слишком прост для продуктивной работы в C ++.

3 голосов
/ 12 апреля 2010

Даже если вы помните все «методы», это только одна часть истории. Чтобы эффективно использовать STL, вам также необходимо знать алгоритмы. Я бы посоветовал прочитать о STL в хорошей книге (Stroustrup, Josuttis, ...), чтобы просто запомнить, что доступно, а затем вернуться к книгам или открыть справочный сайт, когда вам нужен точный синтаксис.

3 голосов
/ 12 апреля 2010

Используйте что-то встроенное в intellisense, например Visual Studio в Windows или KDevelop в Linux.

Есть также дополнения для vim и emacs для intellisense.

1 голос
/ 12 апреля 2010

Признавая, что он не поддерживает запоминание, вы можете запустить intellisense на vim. Преимущество заключается в том, что вы можете создавать теги как из собственных, так и из внешних файлов исходного кода. В любом случае, STL нуждается в особом лечении, которое описано здесь.

Загрузите эти vim-скрипты OmniCppComplete и SuperTab .

Установить OmniCppComplete:

  • Распакуйте плагин в ~ / .vim.

Установить SuperTab:

  • Откройте файл в vim ($ vim supertab.vba).
  • Исходный файл (: так%).

Установите ctags через ваш любимый менеджер пакетов. Скачайте и распакуйте этот файл и запустите на нем ctags.

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

Это создаст файл ctags с именем tags_stl, содержащий 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"]

Это завершает операторы STL для 'tab', '.', '::' и '->', даже когда 'использует пространство имен std;'. Не делай этого, если ненавидишь пурпурный.

1 голос
/ 12 апреля 2010

Узнайте, что они из себя представляют, и общие методы, и тогда будет довольно легко запомнить, какие из них применимы. STL не совсем соответствует, но он довольно хорош.

1 голос
/ 12 апреля 2010

Это может быть не совсем то, что вы ищете, но Скотт Мейерс (из известной "Effective C ++") составил следующий список алгоритмов STL на основе книги Николая Йосуттиса "Стандартная библиотека C ++":

Резюме алгоритмов STL Йосуттиса

...