Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ММиП_РукСамРаб_new.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
668.67 Кб
Скачать

3 Использование stl

Для использования контейнера STL необходимо подключить соответствующую библиотеку (для каждого контейнера своя библиотека), делается это с помощью директивы #include в начале текста программы:

#include <vector>

Для использования стандартных алгоритмов необходимо подключить библиотеку algorithm:

#include <algorithm>

Далее необходимо разрешить использование пространства имен std:

using namespace std;

После этого можно объявлять переменную, допустим для вектора целых чисел:

vector<int> ivector;

Добавление 10 элементов в контейнер с помощью метода push_back, значения вводятся пользователем:

for(int i = 0; i < 10; i++)

{

int v;

cin >> v;

ivector.push_back(v);

}

Вывод содержимого вектора, с помощью итераторов:

vector<int>::iterator it;

for(it = ivector.begin(); it != ivector.end(); it++)

cout << *it << " ";

cout << endl;

в первой строке объявляется итератор для контейнера – переменная it, затем организовывается цикл от самого первого итератора (функция begin()) до последнего (функция end() возвращает несуществующий итератор). Вывод значения, хранящегося в контейнере осуществляется в третьей строке с помощью оператора разименования итератора: *it. В четвертой строке осуществляется вывод символа перевода строки.

Для использования алгоритма сортировки сначала необходимо объявить функцию сравнения, объявим две функции: fless для сортировки по возрастанию и fgreat для сортировки по убыванию:

bool fless(int a, int b)

{

return a < b;

}

bool fgreat(int a, int b)

{

return a > b;

}

Сортировка осуществляется с помощью вызова функии sort, с передачей следующих параметров: итератор первого элемента для сортировки в контейнере, итератора следующего за последним элементом для сортировки в контейнере, и функция сравнения. Так как мы будем сортировать контейнер целиком, воспользуемся итератором начала и итератором конца. Тогда сортировка по убыванию будет выглядеть следующим образом:

sort(ivector.begin(), ivector.end(), fless);

а по возрастанию:

sort(ivector.begin(), ivector.end(), fgreat);

После вызова функции сортировки можно осуществить вывод содрежимого контейнера с помощью кода, записанного ранее.

Поиск значения осуществляется с использованием функии find, в качестве параметров ей надо передать диапазон поиска: итератор первого и последнего элемента:

it = find(ivector.begin(), ivector.end(), 5);

if(it == ivector.end())

cout << "Значение не найдено" << endl;

else

cout << "Найденное значение: " << *it << endl;

в первой строке осуществляется поиск значения 5 в контейнере, итератор на найденный элемент сохраняется в it. Если значение в контейнере не было найдено, то итератор будет равен итератору конца (ivector.end()). Во второй строке осуществляется проверка было ли значение найдено. Если нет – выводится строка «Значение не найдено», если найдено – «Найденное значение: » и вывод самого значения по итератору.

Работа с контейнерами list и deque осуществляется аналогично, надо только подключить соответствующие библиотеки:

#include <list>

#include <deque>

Объявить соответствующие переменные:

list<int> ilist;

deque<int> ideque;

И объявить итератор для соответствующего контейнера:

list<int>::iterator it;

deque<int>::iterator it;