Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
С++_навч_пос14_new.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
1.86 Mб
Скачать

3.35 Шаблон структури "пара" бібліотеки stl

#include <stdio.h>

//шаблон структури pair

template <class T1, class T2>//список шаблонних параметрів

struct pair

{

T1 first;//поле типу T1

T2 second;//поле типу T2

//конструктори

pair(){};

pair(const T1& x,const T2& y):first(x), second(y){};

};

//шаблон перевантаженої операторної функції operator==

template <class T1, class T2>//список шаблонних параметрів

inline bool operator==(const pair<T1,T2>& x,const pair<T1,T2>& y)

{

//повернути true, якщо поля рівні

return x.first==y.first && x.second==y.second;

};

void main()

{

//спеціалізації структур (T1 є double, T2 є int)

pair<double,int> obj1(2.1,3);//створити об’єкт obj1

pair<double,int> obj2(2.1,3);//створити об’єкт obj2

//використання перевантаженого оператора ==

if (obj1==obj2) printf("obj1=obj2");

}

3.36 Використання бібліотеки stl

#include <iostream.h>

#include <vector>//бібліотека контейнера вектора

#include <algorithm>//бібліотека функцій-алгоритмів

#include <functional>//бібліотека функціональних об’єктів (функторів)

//функціональний шаблонний клас add

template <typename T>

class add

{

private:

T x;

public:

add(T ix) : x(ix) { }//конструктор

void operator()(T i)//перевантажений оператор ()

{cout<<i+x<<" ";}

};

//функціональний шаблонний клас add2,

//успадкований від функтора binary_function

template <typename T>

class add2 : binary_function<T, T, T>

{public:

T operator()(T x, T y)//перевантажений оператор ()

{return x+y;}

};

//функція для виводу вмісту вектора

void print(vector<int> &v)

{

static int k=0;

cout<<++k<<": ";

//оголошено ітератор (вказівник на елементи вектора)

vector<int>::iterator it;

//в циклі ітератор указує з першого по останній елемент вектора

//вивести значення елементу

for(it=v.begin(); it!=v.end(); it++) cout<<*it<<" ";

cout<<endl;

}

void main()

{

vector<int> v(5);//оголосити контейнер-вектор розміром 5

vector<int>::iterator it;//оголосити ітератор

//приклад заповнення вектора

int i;

for(it=v.begin(),i=0; it!=v.end(); it++,i++) v[i]=1;

print(v);//1-вивід вектора

//приклад заповнення вектора

for(it=v.begin(); it!=v.end(); it++) *it=2;

print(v);//2

v.erase(v.begin(),v.end());//видалення усіх елементів

print(v);//3-вивід пустого вектора

//приклад заповнення вектора

for(int i=0; i<5; i++) v.push_back(i);//добавляє в вектор і

print(v);//4

v.erase(v.begin()+4);//видалення 5-го елемента

print(v);//5

v.erase(v.begin()+1,v.begin()+3);//видалення 2 і 3-го елементів

print(v);//6

cout<<v.max_size()<<endl;//максимальний розмір вектора

cout<<v.size()<<endl;//розмір вектора

v.insert(v.begin()+1,3,7);//вставка 7 в діапазон з індексами [1,3]

print(v);//7

v.pop_back();//видалення останнього елемента

print(v);//8

//створити вектор v2 - копію v

vector<int> v2(v.begin(), v.end());

cout<<v2.empty()<<endl;//вивід логічного 0 (вектор не пустий)

print(v2);//9

//дописуємо в v вміст v2 з першого по передостанній елемент

v.assign(v2.begin(),v2.end()-1);

print(v);//10

//порівнюємо вектори

if (v==v2) cout<<"v=v2";else cout<<"v<>v2"<<endl;

v2=v;//присвоюємо v2 вміст v

//створення вектора з масиву

int array [] = { 1, 3, 5, 7 , 9};

vector<int> v3 (array, array + 5);

print(v3);//11

//приклади застосування алгоритмів:

//кількість елементів менших 100

cout<<count_if(v.begin(),v.end(),bind2nd(less<int>(),100))<<endl;

add<int> f(2); //функтор (функціональний об’єкт)

//для кожного елементу з діапазону застосувати f

for_each(v.begin(),v.end(),f);

cout<<endl;

//пошук першого числа < 3

//застосування адаптера bind2nd і предиката less

cout<<*find_if(v.begin(),v.end(),bind2nd(less<int>(),3));

cout<<endl;

//копіювати діапазон v3 в v

copy(v3.begin(),v3.end(),v.begin());

print(v);//12

//замінити в діапазоні числа 5 на 13

replace(v3.begin(),v3.end(),5,13);

print(v3);//13

//перемножити елементи v3[i]=v[i]*v2[i]

//використовується стандартний функтор multiplies

transform(v.begin(),v.end(),v2.begin(),v3.begin(),multiplies<int>());

print(v3);//14

//додати елементи v3[i]=v[i]+v2[i]

//використовується функтор користувача add2

transform(v.begin(),v.end(),v2.begin(),v3.begin(),add2<int>());

print(v3);//15

//сортувати v3 по зростанню

sort(v3.begin(),v3.end());

print(v3);//16

//сортувати v3 по спаданню

sort(v3.begin(),v3.end(),greater<int>());

print(v3);//17

//заповнити v3 числами 7

fill(v3.begin(),v3.end(),7);

print(v3);//18

v2.clear();//очистити вектор v2

}