Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
109
Добавлен:
10.12.2013
Размер:
39.94 Кб
Скачать

Министерство Образования Российской Федерации

Пермский Государственный Технический Университет

Кафедра ИТАС

Лабораторная работа № 8

СТАНДАРТНАЯ БИБЛИОТЕКА ШАБЛОНОВ

Выполнил: Студент

группы АСУ 04-2

Заколодкин К.А.

Проверил: Ноткин А.М.

Пермь 2005

Постановка задачи

Написать и отладить три программы. Первая программа демонстрирует использование контейнерных классов для хранения встроенных типов данных.

Вторая программа демонстрирует использование контейнерных классов для хранения пользовательских типов данных.

Третья программа демонстрирует использование алгоритмов STL.

В программе № 1 выполнить следующее:

1. Создать объект-контейнер deque и заполнить его данными типа float

2. Просмотреть контейнер.

3. Изменить контейнер, удалив из него одни элементы и заменив другие.

4. Просмотреть контейнер, используя для доступа к его элементам итераторы.

5. Создать второй контейнер этого же класса и заполнить его данными того же типа, что и первый контейнер.

6. Изменить первый контейнер, удалив из него n элементов после заданного и добавив затем в него все элементы из второго контейнера.

7. Просмотреть первый и второй контейнеры.

В программе № 2 выполнить то же самое, но для данных пользовательского типа.

В программе № 3 выполнить следующее:

1. Создать контейнер, содержащий объекты пользовательского типа.

2. Отсортировать его по убыванию элементов.

3. Просмотреть контейнер.

4. Используя подходящий алгоритм, найти в контейнере элемент, удовлетворяющий заданному условию.

5. Переместить элементы, удовлетворяющие заданному условию в другой (предварительно пустой) контейнер stack

6. Просмотреть второй контейнер.

7. Отсортировать первый и второй контейнеры по возрастанию элементов.

8. Просмотреть их.

9. Получить третий контейнер путем слияния первых двух.

10. Просмотреть третий контейнер.

11 .Подсчитать, сколько элементов, удовлетворяющих заданному условию, содержит третий контейнер.

12.Определить, есть ли в третьем контейнере элемент, удовлетворяющий заданному условию.

Определение пользовательского класса

class BIBL

{

string autor;

string name;

float price;

public:

BIBL ();

BIBL (string,string,float);

BIBL (const BIBL&);

string GetAutor();

int GetPrice();

void Input();

void Show();

friend istream& operator>>(istream&,BIBL&);

friend ostream& operator<<(ostream&,BIBL&);

BIBL& operator = (const BIBL&);

bool operator ==(const BIBL&);

bool operator < (const BIBL&);

};

Определения используемых в программах компонентных функций для работы с контейнером

void Remove_copy_if(db&,sb&,comp_price);

void PrintDeque(string,db);

void PrintStack(string,sb);

void Sort(sb&);

void AddOfFile(ifstream&,db&);

void FindAutor(db,string);

db Merge(db&,sb&);

Объяснение этих функций

void Remove_copy_if(db&,sb&,comp_price) - для создания второго контейнера в программе № 3 .она переносит в stack объекты из deque в соответствии с предикатом comp_price.

void PrintDeque(string,db) – для просмотра контейнера Deque

void PrintStack(string,sb) - для просмотра контейнера Stack

void Sort(sb&) – для сортировки стека

void AddOfFile(ifstream&,db&)- добавление элементов из файла

void FindAutor(db,string)- поиск книги(в теле используется предикат)

db Merge(db&,sb&) – слияние 2х контейнеров

Объяснение используемых в программах алгоритмов STL

В программе используются следующие алгоритмы:

sort() – для сортировки Deque

find_if() – для поиска элемента в соответствии с заданным предикатом

merge() – для слияния 2х контейнеров

copy() – для копирования контейнеров

Определения и объяснения, используемых предикатов и функций сравнения

class comp_grater

{

public:

bool operator()(BIBL& b1,BIBL& b2)

{

if(b1<b2) return false;

else return true;

}

};

//для сортировки по убыванию

class comp_autor

{

string s;

public:

comp_autor(string S){s=S;}

bool operator()(BIBL& b)

{

if(b.GetAutor() == s) return true;

else return false;

}

};

//для проверки условия поиска

class comp_price

{

int t;

public:

comp_price(int T){t=T;}

bool operator()(BIBL& b)

{

if(b.GetPrice()>t) return true;

else return false;

}

};

//для сравнения объектов по цене

Соседние файлы в папке Lab_8