Для этого итератора г определены также операторы ++ и —, как в префиксном, так и в суффикс-ном варианте. Это объясняет смысл следующего цикла for.

for   (i=v.begin();   i   != v.endf);   ++i) cout << *i «  "   ";

В приведенном цикле лучше не заменять != на <. Хотя в примере это сра­ботает, но оператор < неприменим к некоторым другим типам, отличными от vector<int> (см. раздел 1.9), в то время как оператор != работает во всех случаях.

Обычно в математике запись [а, Ь] используется для обозначения закры­того интервала а < х < Ь, а запись (а, Ь) - для открытого интервала а<х<Ь. Это объясняет запись

[а,  Ь) для интервала

а < х < Ъ Подобным же образом мы иногда будем писать

[ia,   ib) для диапазона значений итератора в следующем фрагменте кода:

vector<int>::iterator  i,   ia,   ib;

for   (i = ia;   i   != ib;   ++i)   ...

Ошибка выделения памяти

Поскольку все числа, которые читает программа rea.dwr.cpp, хранятся в динамически распределяемой памяти, используемая нами компьютерная система наложит ограничение на размер ввода. Вопрос усложняется из-за

реализации некоторыми операционными системами виртуальной памяти, что предполагает использование жесткого диска для расширения опера­тивной памяти. Хотя этот подход предоставляет в наше распоряжение ог­ромное количество памяти (за счет уменьшения скорости вычислений), ясно, что рано или поздно фрагмент кода

vector<int> v;

for (;;) v.push_back(0);

приведет к ошибке выделения памяти. То же самое наблюдается при ис­полнении

int  *р;

for   (;;)   р  =  new int;

В последнем фрагменте обычная проверка if (p != NULL) не будет рабо­тать с современными компиляторами C++. Согласно проекту стандарта C++ ошибка выделения памяти будет приводить не к возвращению значе­ния NULL, а к «выбросу исключения». Несмотря на то что ошибка рас­пределения памяти относится к C++, а не к STL, это была бы достаточно важная тема для обсуждения в настоящей книге, если бы существовало простое, переносимое решение, совместимое с большинством популярных компиляторов и соответствующее принятому стандарту C++. Поскольку различные компиляторы требуют разных подходов, а стандарт языка на­ходится в стадии проекта, мы опустим обсуждение этой темы в данной книге, которая все-таки посвящена STL, а не C++.

Возвращаясь назад


<< назад вперед >>