std::string aaa {"aaa"};
std::string bcd {"bcd"};
std::string def {"def"};
std::string zzz {"zzz"};
within(aaa, zzz, bcd, def); // --> true
within(aaa, def, bcd, zzz); // --> false
Отправка нескольких элементов в вектор
Кроме того, вы можете написать вспомогательную функцию, которая не обобщает никаких результатов, но обрабатывает несколько действий одного вида. Такими действиями могут быть вставки элементов в контейнер std::vector
std::vector::insert()
сообщает об ошибке, генерируя исключения):template
void insert_all(std::vector
{
(vec.push_back(ts), ...);
}
int main()
{
std::vector
insert_all(v, 4, 5, 6);
}
Обратите внимание: мы используем оператор «запятая» (,
vec.push_back(...)
, не выполняя свертку для самого результата. Эта функция также хорошо работает в отношении пустого пакета параметров, поскольку оператор «запятая» имеет неявный нейтральный элемент, void()
, который означает «Глава 2
Контейнеры STL
В этой главе:
□ использование идиомы erase-remove для контейнера std::vector
□ удаление элементов из неотсортированного контейнера std::vector
□ получение доступа к экземплярам класса std::vector
□ поддержка экземпляров класса std::vector
□ вставка элементов в контейнер std::map:
□ исследование новой семантики подсказок для вставки элементов с помощью метода std::map::insert
□ эффективное изменение ключей элементов std::map
□ применение контейнера std::unordered_map
□ отбор повторно встречающихся слов из пользовательского ввода и вывод их на экран в алфавитном порядке с помощью контейнера std::set
□ реализация простого ОПН-калькулятора с использованием контейнера std::stack
□ подсчет частоты встречаемости слов с применением контейнера std::map
□ реализация вспомогательного инструмента для поиска очень длинных предложений в текстах с помощью std::multimap
□ реализация личного списка текущих дел с помощью std::priority_queue
Введение
В стандартной библиотеке С++ появилось большое количество стандартных контейнеров. Контейнер всегда содержит набор данных или объектов. Достоинство контейнеров в том, что их можно применять практически для всех объектов, поэтому нужно только выбрать правильные контейнеры для конкретного приложения. STL предоставляет стеки, автоматически увеличивающиеся векторы, ассоциативные массивы и т.д. Таким образом, можно сконцентрироваться на нашем приложении и не изобретать велосипед. В целом каждому программисту С++ не повредит знакомство со всеми контейнерами.
Все контейнеры, предоставляемые STL, можно разделить на такие категории, которые подробнее рассматриваются в следующем разделе:
□ непрерывные хранилища;
□ списки;
□ деревья поиска;
□ хеш-таблицы;
□ адаптеры контейнеров.
Рассмотрим более подробно каждый из пунктов.
Непрерывные хранилища
Самый простой способ хранения объектов — поместить их рядом друг с другом в одном большом фрагменте памяти. Произвольный доступ к такому фрагменту выполняется за время
Это проще всего сделать так: воспользоваться контейнером std::array
Контейнер std::vector