vector
string
и deque
. В массивах функциональность итераторов произвольного доступа обеспечивается указателями.• Любой класс, перегружающий оператор вызова функции (то есть operator
• Функции bind1st
bind2nd
называются Революционным новшеством STL являются гарантии сложности, то есть ограничения объема работы, выполняемой любыми операциями STL. Таким образом, программист может сравнить относительную эффективность нескольких решений в зависимости от платформы STL. Гарантии сложности выражаются в виде функции от количества элементов в контейнере или интервале
• Операция с
Термин «постоянная сложность» не стоит воспринимать буквально. Он означает не то, что время выполнения операции остается строго постоянной величиной, а лишь то, что оно не зависит от
• Операции с
set::find
) обладают логарифмической сложностью.• Время, необходимое для выполнения операций с
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
в этом контексте зависит только от стиля.Бьерн Страуструп , Бьёрн Страуструп , Валерий Федорович Альмухаметов , Ирина Сергеевна Козлова
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT