STL (стандартная библиотека шаблонов)

Цели

В этой статье моя цель - показать вам, как эффективно работать с STL C ++. Особенно с векторами, списками и картами, а также опишите, что они собой представляют и для чего их можно использовать.

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

std :: vector

Это шаблон с одним абстрактным типом класса. По сути, это массив, но с переменным размером, поэтому вы можете добавлять в него любое количество элементов. Он имеет четыре типа итераторов: итератор, const_iterator, reverse_iterator, const_reverse_iterator. Доступ к элементам можно получить с помощью оператора [] или метода .at (), разница в том, что метод at выдаст исключение, когда элемент не найден, оператор не будет.

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

Чтобы объявить вектор, вы пишете: std :: vector ‹value_type› v;, где value_type - это тип элементов, которые вы будете в нем хранить. Вы можете инициализировать вектор с некоторыми элементами прямо там, где вы его объявляете, например: std :: vector ‹int› v ({0, 1, 2});.

Базовые методы этого класса следующие:

std :: vector удобен для хранения элементов, к которым требуется быстрый доступ, а также для последовательного хранения. Это действительно полезно, поскольку позволяет добавлять элементы в массив, например структуру, не слишком заботясь о распределении памяти.

Пример использования:

std :: list

Это шаблон с одним абстрактным типом класса. По сути, это связанный список, в него можно добавлять любое количество элементов. Он имеет четыре типа итераторов. Доступ к элементам можно получить, просматривая список или используя функцию std :: find.

Базовые методы этого класса следующие:

Обычно говорят, что если вам нужен std :: list, отредактируйте алгоритм до тех пор, пока вы не сможете заменить его на std :: vector. Однако в некоторых случаях лучше выбрать список, чем вектор. Если вам нужно разместить / удалить элемент не в конце хранилища, то список позволит вам это сделать гораздо проще, чем в векторе.

Пример использования:

std :: map

Это шаблон с двумя типами абстрактных классов. Первый - это ключ, который используется для доступа ко второму абстрактному типу, значению. Это ассоциативное хранилище, каждое значение из него доступно по ключу, могут быть только уникальные ключи, дубликатов нет.

Важно отметить, что ключи всегда сортируются с помощью оператора ‹автоматически.

Базовые методы этого класса следующие:

std :: map позволяет очень быстро получить доступ к элементам с помощью ключа. Это делает работу удобной благодаря автоматической сортировке по ключу, а также тем, что в нем существуют только уникальные ключи. Таким образом, вы можете избежать дублирования данных, имея при этом удобный удобный способ доступа к данным и их хранения.

Пример использования:

Резюме

Использование передовых методов всегда может упростить и ускорить работу с C ++. Я надеюсь, что эта статья может помочь вам в этом или побудить вас узнать что-то новое об этом языке.

Автор: Мартин Кондор