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() предыдущая перестановка в лексикографическом порядке


 

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

58268. Организация бухгалтерского дела и архива 63.5 KB
  Для обобщения различных видов учетных работ в единое целое обеспечения равномерности их выполнения в течение отчетного периода составляется специальный график в котором для подразделений бухгалтерии и отдельных ее работников указывается время представления первичных документов...
58269. Производство продукции из вторичного древесного сырья на лесопромышленном складе 82.5 KB
  Подготовка древесного сырья является важнейшей частью технологического процесса обеспечивающей возможность использования низкокачественной древесины для получения технологической щепы с допускаемой стандартом засоренностью корой и гнилью.
58270. Начало Французской революции. Свержение монархии. Якобинская диктатура 147.5 KB
  И сразу начались затяжные споры по различным вопросам: о способах проверки полномочий депутатов о совместных и раздельных заседаниях о задачах Генеральных штатов о правах третьего сословия завтрашнем дне страны о будущем Франции.
58271. ЕКОНОМІКА ВЕЛИКОБРИТАНІЇ 40 KB
  У самому справі Великобританії можуть вижити тільки виробництва і торгівлі. За винятком вугілля низькосортна залізна руда природний газ і нафта у Великобританії є кілька природних ресурсів. Вугілля була замінована у Великобританії більше 300 років.
58272. Контроль витрат і стимулювання економії ресурсів. Система обліку витрат 199.5 KB
  Контроль витрат є важливою складовою системи управління витратами, без якої неможлива повноцінна реалізація інших її функцій. До основних завдань контролю витрат відносять: моніторинг - систематичне відстежування динаміки витрат і факторів, які на неї впливають...
58274. Ознайомлення з підручником. Предмет. Фігура. Лічба предметів 36 KB
  Мета: ознайомити учнів з підручником Математика; з’ясувати чи вміють діти лічити числа й називати їх; дати уявлення про предмети геометричні фігури; прищеплювати зацікавленість вивченням математики.
58275. За квітами у пошуках щастя (за новелою Богдана Лепкого «Цвіт щастя») 31.5 KB
  Мета. Удосконалювати вміння переказувати твір; проаналізувати твір Цвіт щастя дослідити реальне і уявне в новелірозкрити образ маленького хлопчикапоказати внутрішній стан; розвивати логічне мислення память творчу уяву...
58276. Лічба предметів. Порівняння груп предметів за величиною 33 KB
  Скільки всього помідорів Скільки огірків Скільки бурячків Скільки всього овочів II. Як легше визначити однакова кількість чи неоднакова Чого більше На скільки більше Чого менше На скільки Що треба зробити щоб кількість трикутників й квадратиків стала однаковою...