8427

Стандартная библиотека шаблонов

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

Информатика, кибернетика и программирование

Стандартная библиотека шаблонов 1. Цель работы Освоить технологию обобщенного программирования с использованием библиотеки стандартных шаблонов (STL) языка C++. 2. Темы для предварительной проработки Классы. Наследование. 3. Задание для ...

Русский

2013-02-11

146.5 KB

25 чел.

Стандартная библиотека шаблонов

1. Цель работы

Освоить технологию обобщенного программирования с использованием библиотеки стандартных шаблонов (STL) языка C++.

2. Темы для предварительной проработки

  •  Классы.
  •  Наследование.

3. Задание для выполнения

    Написать три программы с использованием STL. Первая и вторая программы должны демонстрировать работу с контейнерами STL, третья − использование алгоритмов STL. Результат работы программ сохранить в файл.

Порядок выполнения работы.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

4. Варианты индивидуальных заданий

5. Пример контейнер vector-вектор

Вектор vector в STL определен как динамический массив с доступом

к его элементам по индексу.

template<class T,class Allocator=allocator<T>>class std::vector{…};

где T – тип предназначенных для хранения данных.

Allocator задает распределитель памяти, который по умолчанию является

стандартным.

В классе vector определены следующие конструкторы:

explicit vector(const Allocator& a=Allocator());

explicit vector(size_type число, const T&значение= T(), const Allocator&a=

=Allocator());

vector(const vector<T,Allocator>&объект);

template<class InIter>vector(InIter начало, InIter конец, const Allocator&a=

=Allocator());

Первая форма представляет собой конструктор пустого вектора.

Во второй форме конструктора вектора число элементов – это число,

а каждый элемент равен значению значение. Параметр значение может

быть значением по умолчанию.

Третья форма конструктора вектор – это конструктор копирования.

Четвертая форма – это конструктор вектора, содержащего диапазон

элементов, заданный итераторами начало и конец.

Пример 2.

vector<int> a;

vector<double> x(5);

vector<char> c(5,’*’);

vector<int> b(a); //b=a

Для любого объекта, который будет храниться в векторе, должен

быть определен конструктор по умолчанию. Кроме того, для объекта

должны быть определены операторы < и ==.

Для класса вектор определены следующие операторы сравнения:

==, <, <=, !=, >, >=.

Кроме этого, для класса vector определяется оператор индекса [].

• Новые элементы могут включаться с помощью функций

insert(), push_back(), resize(), assign().

• Существующие элементы могут удаляться с помощью функций

erase(), pop_back(), resize(), clear().

• Доступ к отдельным элементам осуществляется с помощью итерато-

ров

begin(), end(), rbegin(), rend(),

• Манипулирование контейнером, сортировка, поиск в нем и тому по-

добное возможно с помощью глобальных функций файла − заголовка <algorithm.

h>.

Пример 3.

#include<iostream.h>

#include<vector.h>

using namespace std;

85

void main()

{vector<int> v;

int i;

for(i=0;i<10;i++)v.push_back(i);

cout<<“size=”<<v.size()<<“\n”;

for(i=0;i<10;i++)cout<<v[i]<<“ ”;

cout<<endl;

for(i=0;i<10;i++)v[i]=v[i]+v[i];

for(i=0;i<v.size();i++)cout<<v[i]<<“ ”;

cout<<endl;

}

Пример 4. Доступ к вектору через итератор.

#include<iostream.h>

#include<vector.h>

using namespace std;

void main()

{vector<int> v;

int i;

for(i=0;i<10;i++)v.push_back(i);

cout<<“size=”<<v.size()<<“\n”;

vector<int>::iterator p=v.begin();

while(p!=v.end())

{cout<<*p<<” “;p++;}

}

Пример 5. Вставка и удаление элементов.

#include<iostream.h>

#include<vector.h>

using namespace std;

void main()

{vector<int> v(5,1);

int i;

//вывод

for(i=0;i<5;i++)cout<<v[i]<<“ ”;

cout<<endl;

vector<int>::iterator p=v.begin();

p+=2;

//вставить 10 элементов со значением 9

v.insert(p,10,9);

//вывод

p=v.begin();

while(p!=v.end())

{cout<<*p<<” “;p++;}

86

//удалить вставленные элементы

p=v.begin();

p+=2;

v.erase(p,p+10);

//вывод

p=v.begin();

while(p!=v.end())

{cout<<*p<<” “;p++;}

}

Пример 6. Вектор содержит объекты пользовательского класса.

#include<iostream.h>

#include<vector.h>

#include”student.h”

using namespace std;

void main()

{vector<STUDENT> v(3);

int i;

v[0]=STUDENT(“Иванов”,45.9);

v[1]=STUDENT(“Петров”,30.4);

v[0]=STUDENT(“Сидоров”,55.6);

//вывод

for(i=0;i<3;i++)cout<<v[i]<<“ ”;

cout<<endl;

}

Алгоритмы.

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

Алгоритмы определены в заголовочном файле <algorithm.h>. Ниже приведены имена некоторых наиболее часто используемых функций-алгоритмов STL.

I. Немодифицирующие операции.

for_earch() выполняет операции для каждого элемента последовательности

find() находит первое вхождение значения в последовательность

find_if() находит первое соответствие предикату в последовательности

count() подсчитывает количество вхождений значения в последовательность

count_if() подсчитывает количество выполнений предиката в последовательности

search() находит первое вхождение последовательности как подпоследовательности

search_n() находит n-е вхождение значения в последовательность

II. Модифицирующие операции.

copy() копирует последовательность, начиная с первого элемента

swap() меняет местами два элемента

replace() заменяет элементы с указанным значением

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

replace_copy() копирует последовательность, заменяя элементы с указанным значением

replace_copy_if() копирует последовательность, заменяя элементы при выполнении предиката

fill() заменяет все элементы данным значением

remove() удаляет элементы с данным значением

remove_if() удаляет элементы при выполнении предиката

remove_copy() копирует последовательность, удаляя элементы с указанным значением

remove_copy_if() копирует последовательность, удаляя элементы при выполнении предиката

reverse() меняет порядок следования элементов на обратный

random_shuffle() перемещает элементы согласно случайному равномерному распределению (“тасует” последовательность)

transform() выполняет заданную операцию над каждым элементом последовательности

unique() удаляет равные соседние элементы

unique_copy() копирует последовательность, удаляя равные соседние элементы

III. Сортировка.

sort() сортирует последовательность с хорошей средней эффективностью

partial_sort() сортирует часть последовательности

stable_sort() сортирует последовательность, сохраняя порядок следования равных элементов

lower_bound() находит первое вхождение значения в отсортированной последовательности

upper_bound() находит первый элемент, больший чем заданное значение

binary_search() определяет, есть ли данный элемент в отсортированной последовательности

merge() сливает две отсортированные последовательности

IV. Работа с множествами.

includes() проверка на вхождение

set_union() объединение множеств

set_intersection() пересечение множеств

set_difference() разность множеств

V. Минимумы и максимумы.

min() меньшее из двух

max() большее из двух

min_element() наименьшее значение в последовательности

max_element() наибольшее значение в последовательности

VII. Перестановки.

next_permutation() следующая перестановка в лексикографическом порядке

pred_permutation() предыдущая перестановка в лексикографическом порядке


 

А также другие работы, которые могут Вас заинтересовать

65540. ЕФЕКТИВНІСТЬ ВІДНОВЛЕННЯ СИНУСОВОГО РИТМУ У ХВОРИХ З ТРІПОТІННЯМ ПЕРЕДСЕРДЬ МЕТОДОМ ЧЕРЕЗСТРАВОХІДНОЇ ЕЛЕКТРОКАРДІОСТИМУЛЯЦІЇ 183.5 KB
  Тріпотіння передсердь – одне з найбільш поширених порушень серцевого ритму, яке складає біля 10 % від всіх пароксизмальних надшлуночкових тахіаритмій. Воно є частим ускладненням гострого інфаркту міокарда і хірургічних втручань на відкритому серці.
65541. ПОЛІТИЧНІ ЦЕНТРИ ВПЛИВУ НА ЄВРОПЕЙСЬКОМУ КОНТИНЕНТІ: ВНУТРІШНЬОДЕРЖАВНІ ТА МІЖДЕРЖАВНІ ВИМІРИ 172 KB
  Прискорення глобалізаційних процесів у світі загалом та у Європі зокрема поставили перед сучасною політичною наукою питання актуалізації та перегляду існуючих моделей політики, владних відносин тощо. Головними проблемами в цьому аспекті стали питання гармонізації політики...
65542. РОЗРОБКА ТЕХНОЛОГІЧНИХ ТА ОРГАНІЗАЦІЙНИХ РІШЕНЬ РЕМОНТУ ТА ВІДНОВЛЕННЯ ВОДОПРОВІДНИХ ТРУБОПРОВОДІВ 8.81 MB
  Трубопровідні системи які транспортують воду для будьякого населеного пункту є найдорожчими і найуразливішими частинами інженерної інфраструктури. Як свідчать результати досліджень велика кількість водопровідних трубопроводів країн СНД у тому числі України...
65543. ОДЕРЖАННЯ ЖОВТОГО ЗАЛІЗООКСИДНОГО ПІГМЕНТУ МЕТОДАМИ ГОМОГЕННОГО ХІМІЧНОГО ОСАДЖЕННЯ ТА МОДИФІКУВАННЯ КАРБАМІДОФОРМАЛЬДЕГІДНИМИ ПОЛІМЕРАМИ 2.98 MB
  Дослідити закономірності взаємодії карбаміду з формальдегідом у присутності солей заліза і осадження гетиту карбамідоформальдегідними полімерами надалі КФП. Об'єктом дослідження були процеси на яких ґрунтується запропонований спосіб одержання...
65544. Розширення функціональних можливостей верстатів-гексаподів шляхом визначення їх раціональних конструктивних параметрів 502.95 KB
  Актуальність дисертаційної роботи визначається обмеженою кількістю теоретичних розробок і практичних рекомендацій щодо особливостей будови та функціонування ВПК визначенню їх технічних та технологічних показників конкретних результатів досліджень...
65545. РЕГУЛЬОВАНІ ЕЛЕКТРОПРИВОДИ З АКТИВНИМИ ВИПРЯМЛЯЧАМИ 243.5 KB
  Формування вхідних струмів АВ може здійснюватись низькочастотним та високочастотним керуванням ШІМкерування. Системи керування АВ дуже різняться між собою деякі АВ можуть мати кілька варіантів системи керування ними як наприклад шестиключовий АВ напруги тому потребують більш детального...
65546. НАЦІОНАЛЬНО-ВИЗВОЛЬНА ІДЕЯ В ХУДОЖНЬОМУ ТРАКТУВАННІ УКРАЇНСЬКИХ ПИСЬМЕННИКІВ ПЕРШОЇ ЕМІГРАЦІЙНОЇ ХВИЛІ 157.5 KB
  Останнє набуло особливої значимості для формування національної ідеї збереження духовності нації. Своє бачення національної ідеї українства оприявнювала й література передусім через твори тих письменників доробок котрих мав виразне національне спрямування.
65547. АВТОМАТИЗОВАНЕ УПРАВЛІННЯ ПІДСИСТЕМАМИ ТЕХНОЛОГІЧНОГО КОМПЛЕКСУ ЦУКРОВОГО ЗАВОДУ З ВИКОРИСТАННЯМ МЕТОДІВ ДІАГНОСТИКИ І ПРОГНОЗУВАННЯ 937 KB
  Метою роботи є підвищення ефективності функціонування ТК цукрового заводу за рахунок удосконалення систем автоматизації шляхом використання алгоритмів діагностики і прогнозування. При вирішенні поставлених задач одержані нові наукові результати: вперше показано що для оцінки...
65548. МЕТОДИ ТА СИСТЕМИ ВІДТВОРЕННЯ ЗОБРАЖЕНЬ НА БАЗІ ЛОГІКО-ЧАСОВИХ ПЕРЕТВОРЕННЬ 857.65 KB
  Для візуального подання інформації та її реалістичного відображення необхідно створити системи відтворення зображень серед яких перспективними є світлодіодні матричні екрани які широко використовуються в професійних інсталяціях.