Как найти количество слов в фразе с удаленными пробелами, проверив v. Словарь

Не то, что я знаю, однако это можно сделать в текстовом режиме, я думаю. Кроме того, диаграмма немного выключена, потому что list не является таким хорошим контейнером в целом, и не является forward_list. Оба списка являются очень специализированными контейнерами для нишевых приложений.

Чтобы построить такую ​​диаграмму, вам просто нужно два простых руководства:

  • Выберите сначала семантику
  • Когда доступно несколько вариантов, пройдите самый простой

. Беспокойство о производительности обычно бесполезно вначале.

Существуют две большие категории контейнеров:

  • Ассоциативные контейнеры: они имеют find операцию
  • Контейнеры простой последовательности

, а затем вы можете построить несколько адаптеров поверх них: stack, queue, priority_queue. Я оставлю адаптеры здесь, они достаточно специализированы, чтобы быть узнаваемыми.


Вопрос 1: Ассоциативный?

  • Если вам нужно легко выполнить поиск по одному ключу , тогда вам понадобится ассоциативный контейнер
  • . Если вам нужно отсортировать элементы, вам понадобится упорядоченный ассоциативный контейнер
  • . В противном случае перейдите к вопросу 2.

Вопрос 1.1: Упорядочено?

  • Если вам не нужен конкретный заказ, используйте контейнер unordered_, иначе используйте его традиционную упорядоченную копию.

Вопрос 1.2: Отдельный ключ?

  • Если клавиша отделена от значения, используйте map, в противном случае используйте set

Вопрос 1.3: Дубликаты?

  • Если вы хотите сохранить дубликаты, используйте multi, в противном случае нет.

Пример:

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

  1. Я хочу функцию find, таким образом ассоциативный контейнер 1.1. Я не мог заботиться о порядке, таким образом, в контейнере unordered_ 1.2. Мой ключ (ID) отделен от значения, с которым он связан, таким образом, map 1.3. Идентификатор уникален, поэтому дубликат не должен появляться.

Окончательный ответ: std::unordered_map.


Вопрос 2: Устойчивость к памяти?

  • Если элементы должны быть стабильными в памяти (т. е. они не должны перемещаться при изменении самого контейнера), используйте некоторые list
  • . В противном случае перейдите к вопросу 3.

Вопрос 2.1: Который?

  • Устроить для list; a forward_list полезен только для уменьшения объема памяти.

Вопрос 3: Динамический размер?

  • Если контейнер имеет известный размер ( во время компиляции), и этот размер не будет изменен в течение программы, и , элементы по умолчанию конструктивны или , которые вы можете предоставить полный список инициализации (используя синтаксис { ... }), затем используйте array. Он заменяет традиционный C-массив, но с удобными функциями.
  • В противном случае переходите к вопросу 4.

Вопрос 4: Double-end?

  • Если вы хотите удалять элементы как спереди, так и сзади, используйте deque, в противном случае используйте vector.

Вы заметите, что по умолчанию, если вам не нужен ассоциативный контейнер, ваш выбор будет vector. Оказывается, это также рекомендация Саттера и Страуструпа .

-9
задан mc110 17 June 2014 в 09:03
поделиться