Рекомендация использовать != (или ==) для сравнения значений итераторов вместо <, <=, >, >= усложняет прохождение элементов вектора в обратном порядке с помощью только что обсужденных средств. В программе readwr.cpp мы могли бы добиться этого, заменив цикл for на следующий фрагмент:

i  = v.end();

if   (i   != v.begin())

do cout <<  *--i <<  "   ";  while   (i   != v.beginO);

В начале приведенного решения требуется дополнительное сравнение для определения пустого вектора, в случае если число 0 было единственным числом, введенным пользователем программы. Однако существует более простой путь прохождения вектора (и других структур данных) задом на­перед. Он требует использования двух других функций-членов, rbegin и rend, вместе с другим типом итератора, reverseJtterator, как демонстриру­ет следующий фрагмент:

vector<int>::reverse_iterator i; for   (i=v.rbegin;   i   != v.rend();   ++i) cout  <<   *   i  <<   "   " ;

Заметьте, что в этом случае мы пишем ++г вместо —г.

Новые элементы языка и проблемы переносимости

В программе readwr.cpp способ указания файлов заголовка в строках ^include может показаться вам непривычным (и отличающимся от того, как мы писали в разделе 1.1). Раньше мы всегда использовали iostream.h и vector.h вместо просто iostream и vector. Эти короткие формы приняты в последней версии C++, которая называется проектом стандарта C++. Во многих случаях можно использовать любой из вариантов, например, ука­зывая как <iostream.h>, так и <iostream>. Далее мы везде будем пользо­ваться последним, более новым вариантом.

Интересно, что, хотя мы пишем <iostream>, на самом деле файл может называться iostream.h (например, для компилятора Borland C++ 5.2). В свя­зи с этим возникают сомнения, правомерно ли называть iostream файлом за­головка. С этого раздела начнем использовать термин заголовок, а не файл заголовка. В соответствии с принятым употреблением мы будем применять этот короткий термин не только к именам, заключенным в угло­вые скобки, как <iostream>, но и к самим файлам, таким как iostreamh.

Другой новый аспект языка заставит нас добавлять конструкцию using namespace std в начале программы. Если опустим эту строчку, может по­явиться сообщение об ошибке типа «Не определен символ 'vector'»


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