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


 

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

41620. Решение задачи Дирихле для уравнения Пуассона методом Чебышева 103.07 KB
  Разностную задачу 5 будем решать явным итерационным методом с чебышевским набором параметров который выражается следующей формулой: 10 где заданное число итераций . 11 Результаты: В вычислениях использовался следующий алгоритм: Задаём количество итераций полагаем тогда шаг сетки =01. Полученный ответ с точностью до...
41621. Генерация таблицы переходов и функций возбуждения тригеров 141.5 KB
  В результате выполнения данной лабораторной работы я приобрёл навыки анализа графовых структур и автоматизации процедуры построения таблицы переходов. Мной был разработан класс для генерации таблицы переходов.
41622. Решение первой начальной краевой задачи для уравнения теплопроводности по схеме Кранка-Николсона 102.29 KB
  Задача: Используя метод простых итераций метод Чебышева и метод наискорейшего спуска найти по схеме КранкаНиколсона приближенное решение задачи: 1 2...
41623. Дослідження структури поля в металевих хвилеводах і резонаторах 179.46 KB
  Київ 2010 Мета роботи – дослідити розподіл електромагнітного поля в призматичних та циліндричних хвилеводах та резонаторах методом електричного зонду. Структура поля досліджується за допомогою електричного зонду з детекторною голівкою.
41624. Робота з операторами INSERT, UPDATE, DELETE 47.12 KB
  VLUES із списком з декількох значень підтримується у версії MySQL 3. Синтаксис виразу col_nme=expression підтримується у версії MySQL 3. У MySQL завжди передбачено значення за умовчанням для кожного поля. Ця вимога нав'язана MySQL щоб забезпечити можливість роботи як з таблицями які підтримують транзакції так і з таблицями що не підтримують їх.
41625. Створення резервної копії та відновлення даних з неї 218.34 KB
  Вибрати базу даних. У вікні Загрузка файла вибрати Сохранить та вказати місце на диску для збереження дампу бази даних. Відновлення бази даних за допомогою програми phpMydmin Щоб виконати відновлення бази даних потрібно: Вилучити існуючу базу даних.
41628. Синтез моделей тіла людини за дії допустимих напруг дотику 616.17 KB
  Львів 2013 Мета роботи: розрахувати параметри моделі тіла людини за дії на неї довготривалих допустимих напруг. Загальні відомості про синтез моделей тіла людини Тіло людини як елемент електричного кола складається з декількох шарів з різними електричними характеристиками. За інших рівних умов напруженість електричного поля в тілі тим менша чим вища його електрична проникність що характеризує здатність тіла до поляризації.