1.2. Знакомство с STL
Установив современный компилятор C++, мы можем сразу начать использовать STL, например откомпилировать и запустить следующую программу. Эта программа читает с клавиатуры переменное количество ненулевых целых чисел и печатает их в том же порядке после того, как введен 0. Данная задача может показаться слишком простой, но на самом деле это не так, потому что нет ограничения на количество вводимых чисел:
// readwr.cpp: Чтение и вывод переменного количества
// ненулевых целых (ввод завершается нулем).
#include <iostream>
#include <vector>
using namespace std;
int main()
{ vector<int> v;
int x;
cout << "Enter positive integers, followed by 0:\n";
while (cin >> x, x != 0) v.push_back(x);
vector<int>::iterator i;
for (i=v.begin(); i != v.end(); ++i) cout << *i << " ";
cout << endl;
return 0; }
Мы можем использовать шаблон vector как массив переменной длины. Сначала эта длина равна нулю. Поскольку мы хотим, чтобы элементы вектора были целого типа, то всегда пишем vector<int>, чтобы обозначить класс, с которым работаем. Выражение
v.push_back(x);
добавляет значение х типа int в конец вектора v.
Оператор for в этой программе используется аналогично тому, как это сделано в следующем фрагменте кода, который выводит массив а вместо вектора v.
int a[N], *р;
for (p=a; p != a+N; p++) cout << *p << " ";
Напомним, что выражения &<з[0] и а эквивалентны, равно как и выражения &a[N] и а + N. Начав с первого элемента, мы проходим массив, пока
не оказываемся за его концом: хотя указываем на адрес a[N], последний элемент массива - a[N-l]. Это может выглядеть опасным, но поскольку мы не используем значение a[N], а только его адрес, такой стиль абсолютно безопасен. Переменная i, определенная как
vector<int>::iterator i;
называется итератором. Она используется таким же образом, как указатель в вышеприведенном фрагменте. Значение итератора для первого элемента вектора v обозначается выражением v.beginQ, а значение итератора для элемента, следующего за конечным, обозначается как v.endQ. Значение элемента вектора, на который ссылается допустимый итератор г, обозначается выражением * г, как если бы i был указателем
<< назад вперед >>