1.4. Сортировка
Ниже следует расширение программы readwr.cpp, рассмотренной в начале раздела 1.2. Эта программа сортирует вектор v, то есть располагает элементы v в восходящем порядке:
// sortl.cpp: Сортировка вектора. #include <iostream> #include <vector> #include <algorithm> 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);
sort (v.begin() , v.endO);
cout « "After sorting: \n";
vector<int>::iterator i;
for (i=v.begin)) ; i != v.endO; + + i)
cout << *i << " "; cout « endl; return 0; }
Сама сортировка выполняется выражением
sort (v. begin () , v.endO);
Мы используем два значения итераторов в качестве аргументов: первый, v.beginQ, ссылается на начальный элемент вектора и второй, v.endQ, ссылается на следующий за последним элемент вектора. Вывод этой программы содержит введенные пользователем целые числа, отсортированные в восходящем порядке.
Вышеприведенный вызов функции sort отличается от вызовов push_back, insert, begin и др. Поскольку мы пишем не v.sort(...), а просто sort(...), видно, что sort является не функцией-членом класса vector, а шаблонной функцией, которая не является членом класса. Технический термин, обозначающий такую шаблонную функцию в STL,- обобщенный {generic) алгоритм, или просто алгоритм. Строчка
#include <algorithm>
необходима, поскольку мы используем алгоритм sort. Для некоторых реализаций STL компилятор не выдает сообщения об ошибках, если мы опустим эту строчку, поскольку заголовок algorithm включается неявным образом с помощью строки
#include <vector>
Так как было бы неразумно рассчитывать на это, мы используем обе строчки Uinclude. Напротив, в следующей программе, которая сортирует обычный массив вместо вектора, достаточно включить только заголовок algorithm:
II sort2.cpp: Сортировка массива. #include <iostream> #include <algorithm> using namespace std;
int main()
{ int а[10], х, n = 0, *р;
cout « "Enter at most 10 positive integers, " "followed by O:\n\-
while (cin » x, x != 0 && n < 10) a[n++] = x;
sort(a, a+n);
cout « "After sorting: \n";
for (p=a; p != a+n; p++) cout « *p « " ";
cout « endl;
return 0; }
<< назад вперед >>