Сам механизм шаблонов встроен в компилятор , это сделано с целью создавать компактные библиотеки, отличающиеся эффективностью. В настоящий момент такая библиотека входит в состав C++ и называется STL.
На самом деле существует очень много реализаций библиотеки шаблонов, которые при этом следуют стандарту, однако предлагают свои расширения. Это является и плюсом и минусом одновременно. Отрицательная сторона состоит в том, что не всегда получается использовать код второй раз с другим компилятором.
STL состоит из коллекций, каждая из которой имеет собственный набор стандартных параметров, они необходимы для того, чтобы реализовать какой-либо класс для решения задач. Реально в STL присутствует очень много коллекций, однако все их рассмотреть невозможно, поэтому остановимся лишь на наиболее популярных.
Vector - коллекция элементов Т, которые сохраняются в увеличиваемом по необходимости массиве. Для использования такой коллекции, нужно включить #include <vector>.
List - коллекция элементов Т, которые сохраняются в виде двунаправленного связанного списка. Для использования такой коллекции, нужно включить #include <list>.
Map - коллекция, помогающая сохранять пары значений pair<const Key, T>. Данная коллекция сделана для быстрого поиска значения T по специальному ключу const Key. В виде ключа могут быть использованы как строка, так и int, однако при этом не забывайте, что у ключа есть важное свойство - возможность применения операции сравнения. Еще одним важным моментом является то, что ключ должен быть обязательно уникальным. Для использования такой коллекции, нужно включить #include <map>.
Set - коллекция значений const Key, обладающих уникальностью, каждое из них является и ключом. Другими словами данная коллекция предназначена для поиска нужного значения. Здесь к ключу предъявляются такие же требования, как и в предыдущем случае. Удобство использования этой коллекции состоит в том, что при ее использовании можно избежать двукратного сохранения одного и того же значения. Для использования такой коллекции, нужно включить #include <set>.
Multimap - усовершенствованный map, в нем нет требования уникальности ключа. Таким образом, если производится поиск по ключу, то выдается не одно значение, а целый набор, сохраненных с ним. Для использования такой коллекции, нужно включить #include <map>.
Multiset - здесь то же самое, что и в предыдущей коллекции, уникальность ключа не требуется, поэтому существует возможность хранить дубликаты. Однако возможность быстрого поиска значений по ключу существует тогда, когда определен класс. Все значения в map и set лежат в отсортированном виде. Для использования такой коллекции, нужно включить #include <set>.
String - коллекция символов char в формате ASCII. Для использования такой коллекции, нужно включить #include <string>.
Wstring - коллекция двухбайтных символов wchar_t, используемая для представления некоторого набора символов в формате Unicode. Для использования такой коллекции, нужно включить #include <xstring>.Применение коллекций и ищите на cyberguru.ru. Строковый поток считается чисто буфером, в конце его установлен нуль терминатор, именно поэтому конце строки виден мусор во время первой распечатки, то есть фактически конец строки определен с помощью счетчика, размер которого можно получить с помощью pcount (). Основные методы, присутствующие практически во всех STL:
- empty – определяет наполнение коллекции;
- size - размер коллекции;
- begin - прямой итератор, направляющий на начало коллекции;
- end - прямой итератор, направляющий на конец коллекции;
- rbegin - обратный итератор, направляющий на начало коллекции;
- rend - обратный итератор, направляющий на конец коллекции;
- clear - стирает все элементы коллекции, однако если коллекции присутствуют указатели, то их придется удалять вручную;
- erase - удаляет один или несколько элементов из состава коллекции;
- capacity - вместимость коллекции - размер буфера коллекции.