Рекомендация использовать != (или ==) для сравнения значений итераторов вместо <, <=, >, >= усложняет прохождение элементов вектора в обратном порядке с помощью только что обсужденных средств. В программе 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'»
<< назад вперед >>