Студопедия
Новини освіти і науки:
МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах


РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання


ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ"


ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ


Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків


Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні


Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах


Гендерна антидискримінаційна експертиза може зробити нас моральними рабами


ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ


ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів



Контакти
 


Тлумачний словник
Авто
Автоматизація
Архітектура
Астрономія
Аудит
Біологія
Будівництво
Бухгалтерія
Винахідництво
Виробництво
Військова справа
Генетика
Географія
Геологія
Господарство
Держава
Дім
Екологія
Економетрика
Економіка
Електроніка
Журналістика та ЗМІ
Зв'язок
Іноземні мови
Інформатика
Історія
Комп'ютери
Креслення
Кулінарія
Культура
Лексикологія
Література
Логіка
Маркетинг
Математика
Машинобудування
Медицина
Менеджмент
Метали і Зварювання
Механіка
Мистецтво
Музика
Населення
Освіта
Охорона безпеки життя
Охорона Праці
Педагогіка
Політика
Право
Програмування
Промисловість
Психологія
Радіо
Регилия
Соціологія
Спорт
Стандартизація
Технології
Торгівля
Туризм
Фізика
Фізіологія
Філософія
Фінанси
Хімія
Юриспунденкция






Спеціалізація

 

По замовчуванню, шаблон дає єдине визначення, яке має використовуватись для всіх аргументів шаблону. Це не завжди має сенс. Альтернативне визначення шаблону дає можливість компілятору зробити вибір потрібного варіанту на основі аргументів шаблону. Такі альтернативні визначення шаблону називаються спеціалізація ми або користувацькими спеціалізаціями.

Наприклад,

 

template<class T> class Vector {…} // загальний тип vector

Vector<int>vi;

Vector<string>vs;

Vector<char*>vpc;

 

В більшості реалізацій С++ код функцій шаблону дублюється. Це позитивно впливає на продуктивність. Але це призводить до збільшення кодів програм. Спеціалізація є способом задання альтернативних реалізацій для специфічного використання загального інтерфейсу.

 

Шаблони та дружні функції

 

Класи шаблона можуть оголошувати три пити дружніх відношень:

- дружній клас або функція, що не є шаблонними;

- дружній шаблон класу або функція, що входить в шаблон;

- дружній шаблон класу або шаблонна функція певного типу даних.

Рекомендується використовувати шаблони для представлення алгоритмів, що застосовуються до багатьох типів аргументів; використовуйте аргументи шаблону для вибору алгоритму; якщо для функцій шаблону необхідне різна поведінка в залежності від фактичного типу, то функцію шаблона можна перевизначити для конкретного типу. Використовуйте шаблони, коли поведінка класу незмінна, за винятком типу елемента, з яким працює клас.

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

В новій версії мови С++ прийнята стандартна бібліотека шаблонів STL. STL – це бібліотека класів контейнерів, що базуються на шаблонах. Вона включає вектори, списки, черги та стеки, а також ряд узагальнених алгоритмів, таких як сортування та пошук.

Задача STL полягає в тому, щоб звільнити програміста від чергового винаходу колеса. Бібліотеку STL можна багаторазово використовувати для розробки власних програм.

Контейнери

Контейнер – це об’єкт, який включає інші об’єкти. Розрізняють два типи класів контейнерів бібліотеки STL :

- послідовні;

- асоціативні.

Послідовні контейнери забезпечують послідовний або довільний доступ до своїх членів або елементів. Види послідовних контейнерів:

- вектори; - списки; - двосторонні черги. Для підєднання контейнера

необхідно записати

#include <ім‘я контейнеру >

using namespace std

Вектор

Вектор – це контейнер для швидкого доступу до його елементу за індексом.

Клас-контейнер бібліотеки STL vector визначений в файлі заголовку <vector > в просторі імен std. Визначення класу vector:

 

template < class T, class А= allocator<T>> class vector

{…};

 

Перший аргумент class T означає тип елементів векторів. Другий аргумент class А – клас розподілу, що має функції диспетчерупамяті.

 

vector<int> vInts; // вектор включає цілі елементи

vector<float> vFloats; // вектор включає дійсні елементи.

vector<Student> MathClass(50); // вектор для 50 студентів

 

Функція vStudent.size( ) поверне значення 50 – кількість елементів у векторі.

Функція empty( ) повертає значення true, якщо вектор пустий.

Додати елемент у вектор можна з допомогою функції-члену push_back( ) (додати в кінец):

MathClass.push_back(Sally);

front( ) - повертає посилання на перший елемент в списку;

back( ) – повертає посилання на останній елемент в списку;

insert( ) – вставляє один або декілька елементів в поточну позицію вектора;

pop_back( ) – видаляє з вектора останній елемент;

remove( ) – видаляє з вектора один або декілька елементів.

Список

Список (list) – це контейнер, що призначений для оптимального виконання частих вставок та видалень елементів. Клас-контейнер бібліотеки STL list визначений в файлі заголовку <list> в просторі імен std. Клас list реалізований як двонаправлений зв’язаний список, в якому кожний блок включає вказівники на попередній та на наступний блок. Клас list включає всі функції-члени класу вектор. Перехід на конкретний елемент або блок списку відбувається за допомогою ітератора або узагальненого вказівника.

typedef list<int> integerList;

int main( )

{ IntegerList intList; // список цілий чисел

}




Переглядів: 185

Не знайшли потрібну інформацію? Скористайтесь пошуком google:

 

© studopedia.com.ua При використанні або копіюванні матеріалів пряме посилання на сайт обов'язкове.


Генерація сторінки за: 0.006 сек.