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


 

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

28260. Эффект Плацебо 162.71 KB
  Про эффект плацебо. О важности впечатления которое производит врач. Плацебо терапия. Зачем глотать таблетку, если можно съесть конфетку. Фальшивки помогают вырабатывать гормон счастья. Плацебо вместо операции
28263. Функции внимания, его характеристики и методы диагностики 40.5 KB
  Функции внимания его характеристики и методы диагностики. Функции внимания: функция отбора значимых воздействий которые соответствуют потребностям данной деятельности; функция игнорирования других несущественных контролирующих воздействий; функция удержания сохранения выполняемой деятельности пока не будет достигнута цель т. Виды внимания: непроизвольное непреднамеренное произвольное преднамеренное Выделяют еще послепроизвольное внимание. Поддержание устойчивого произвольного внимания зависит от ряда условий.
28264. Операциональная природа мышления как процесса отражения связей иотношений. Виды мыслительных операций 62 KB
  Операциональная природа мышления как процесса отражения связей иотношений. Этот вид мышления онтогенетическиявляется первым. Понятие единица мышления выражающая общие и наиболее существенные признаки предметов и явлений действительности. Это основной вид мышления.