vecto
string
и deque
. В массивах функциональность итераторов произвольного доступа обеспечивается указателями.
•Любой класс, перегружающий оператор вызова функции (то есть operator
•Функции bind1st
и bind2nd
называются
Революционным новшеством STL являются гарантии сложности, то есть ограничения объема работы, выполняемой любыми операциями STL. Таким образом, программист может сравнить относительную эффективность нескольких решений в зависимости от платформы STL. Гарантии сложности выражаются в виде функции от количества элементов в контейнере или интервале
•Операция с
Термин «постоянная сложность» не стоит воспринимать буквально. Он означает не то, что время выполнения операции остается строго постоянной величиной, а лишь то, что оно не зависит от
•Операции с
•Время, необходимое для выполнения операций с count
работает с линейной сложностью, поскольку он должен просмотреть каждый элемент в заданном интервале. Если интервал увеличивается в три раза, объем работы тоже увеличивается втрое, поэтому операция занимает в три раза больше времени.
Как правило, операции с постоянной сложностью выполняются быстрее, чем операции с логарифмической сложностью, а последние выполняются быстрее операций с линейной сложностью. Этот принцип особенно четко выполняется для больших значений
И последнее замечание по поводу терминологии: вспомните, что каждый элемент контейнеров map
и multimap
состоит из двух компонентов. Я обычно называю первый компонент
map
ключ относится к типу string
, а ассоциированное значение — к типу double
.
Примеры
Книга содержит множество примеров. Все примеры комментируются по мере их приведения, и все же кое-что следует пояснить заранее.
Из приведенного выше примера с map
видно, что я обычно опускаю директивы #include
и игнорирую тот факт, что компоненты STL принадлежат пространству имен std. Полное определение m должно было выглядеть так:
#include
#include
using std::map;
using std::string;
map
Но я предпочитаю оставить в примере лишь самое существенное. При объявлении формального параметра-типа шаблона вместо class
используется ключевое слово typename
. Иначе говоря, вместо конструкции вида
template
class Widget{...};
я использую конструкцию
template
class Widget{...};
В данном контексте ключевые слова class
и typename
эквивалентны, но мне кажется, что слово typename
более четко выражает важную мысль: подходит class
— пожалуйста. Выбор между typename
и class
в этом контексте зависит только от стиля.