рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Короткі теоретичні відомості

Короткі теоретичні відомості - раздел Образование, Навчальної дисципліни Основи програмування та алгоритмічні мови   Stl - Це Бібліотека Стандартних Шаблонів. Вона Містить, Напри...

 

STL - це бібліотека стандартних шаблонів. Вона містить, наприклад, що часто зустрічаються способи організації даних - так називані контейнери: динамічні масиви, двонаправленi списки, стеки й ін. Крім того, STL містить безліч алгоритмів що часто зустрічаються: сортування (як на всій безлічі, так і на частині), знаходження мінімального й максимального значень й ін. Кожен такий алгоритм працює з різними типами контейнерів. Ви, наприклад, можете використати той самий алгоритм сортування як для динамічного масиву, так і для стека.

STL складається із трьох основних частин: контейнери, алгоритми й iтератори.

Частина перша. Вона містить різноманітні контейнери. Частина контейнерів зрозуміла і - це динамiчнi масиви, списки, черги й ін. Інша частина більше просунута, якщо можна так виразитися. Сюди, наприклад, ставляться так називані асоціативні контейнери. Основна їхня відмінна риса - це те, що значення, що зберігаються в них, шукаються по ключах. При цьому ключ може бути самим різним. Аналогія такого контейнера з життя - це телефонна книга. Там номера телефонів шукаються на прізвище власника або назви фірми.

У кожному контейнері крім властиво даних є методи для роботи із цими даними (для додавання, пошуку, видалення й ін.).

Друга частина бібліотеки STL - це алгоритми. Алгоритми не є частиною контейнерів, а утворять окрему підсистему. Але при цьому майже будь-який алгоритм може застосовуватися до майже будь-якого контейнеру. Т. е. викликаючи метод для деякого алгоритму, ми викликаємо цей метод сам по собі, а не для екземпляра деякого класу. Контейнер же, до якого застосовується алгоритм, передається як параметр.

І, нарешті, третя частина STL - це різноманітні iтератори. У першому наближенні iтератор - це деякий покажчик, що може оббігати всі елементи контейнера. iтератори грають такі ж ролі, що й індекс в елемента масиву. Через індекс масиву ми можемо одержати деякий елемент масиву, і через iтератор ми можемо одержати деякий елемент контейнера. Iтератори бувають різних типів: для руху тільки вперед, для руху в обидва боки й ін.

Приклад контейнера vector:

Vector є не чим іншим, як динамічним одномірним масивом - тобто ви можете додавати в нього елементи, видаляти їх і т.п.

Ввід приклад використання цього шаблона:

#include <iostream>// Додаємо потрібний простір імен.#include <vector>using namespace std;void main(){ // Повідомляємо вектор із цілих. vector <int> k; // Додаємо елементи в кінець вектора. k.push_back(22); k.push_back(11); k.push_back(4); // Показуємо всі елементи вектора. for (int i = 0; i<k.size(); i++) { cout<<k[i]<<"\n"; } cout<<"***\n"; // Видаляємо елемент із кінця вектора. k.pop_back(); // Показуємо всі елементи вектора. for (i = 0; i<k.size(); i++) { cout<<k[i]<<"\n"; } cout<<"***\n"; // Видаляємо всі елементи вектора k.clear(); // Перевіряємо, що вектор порожній. if(k.empty) { cout<<"Vector is empty\n"; }}

Використані методи й змінні шаблона vector (push_back, pop_back, clear й empty) досить ясні з коментарів. Звернете ще увагу, що для доступу до окремих елементiв вектора ми використаємо оператор [] - як і для елементів масиву. Також зверніть увагу, що ми повинні підключити потрібний простір імен (vector).

Виведе цей код, як і слід було сподіватися, спочатку 22, 11 й 4, потім, після видалення останнього елемента вектора, 22 й 11, і потім, після видалення всіх елементів вектора, напис "Vector is empty"

А от ще які класи-контейнери є в STL:

list - двонаправлений список. Доступ до елементів можливий тільки послiдовний із двох сторін списку.

stack - стік.

map - асоціативний список. Зберігає дані у вигляді пари Джерело-Значення (з кожен ключем зв'язане тільки одне значення).

multimap - асоціативний список. Зберігає дані у вигляді пари Джерело-Значення (з кожен ключем зв'язано тільки кілька значень).

set - безліч. Всі його елементи унікальні.

multiset - безліч. У ньому можуть бути співпадаючі елементи.

queue - черга.

deque - двостороння черга.

bitset - набір бiтов (кожний з яких відповідає за відсутність / наявність чого-небудь).

Для використання цих шаблонів ви повинні написати на початку програми потрібний include. Як правило, include пишеться такий же, як ім'я шаблона (так, наприклад, для використання шаблона list треба написати #include ). Два виключення - для використання multimap треба в include додати map і для multiset - set.

Отже: контейнер - шаблон класу, службовець для зберігання даних. Простими словами: контейнер потрібний нам як "обгортка" навколо наших даних, щоб зберігати їх, наприклад, у списку. Такий список можна організувати із чисел float, з рядків string, з об'єктів створеного нами класу (структури), і т.д.

Приклад ітератора:

У першому наближенні iтератор - це покажчик на деякий елемент у контейнері. І, як й у випадку з покажчиками, добратися до елемента контейнера можна через безiменний iтератор.

От приклад коду:

#include <iostream>#include <vector>using namespace std;void main(){ // Повідомляємо вектор із цілих. vector <int> k; // Додаємо елементи в кінець вектора. k.push_back(22); k.push_back(11); k.push_back(4); // Повідомляємо iтератор. vector <int>::iterator p; // Установлюємо iтератор у початок // і пересуваємо його в циклі // на наступну позицію. for (p = k.begin(); p < k.end(); p++) { // Виводимо вміст елементів вектора // через безiменний iтератор. cout<<*p<<"\n"; }}

Вихід: 22, 11 й 4.

Iтератор - спеціальний тип, службовець аналогом Си-шного покажчика, використається для проходу за списком, масиву, пошуку елемента в асоціативному списку, і т.д. Це дійсний аналог покажчика, до нього можна застосовувати операції ++ й -- , "зірочку" або -> для одержання значення. Операція ++ зрушує iтератор до наступного елемента динамічного масиву, списку, черги й т.п. Можна порівнювати два iтератора. Замість NULL, ознакою виходу за межі припустимих значень служить спеціальний iтератор, одержаний з контейнера за допомогою функції end().

Приклад алгоритму:

Розглянемо застосування алгоритмів на прикладі сортування елементів вектора.

#include <iostream>#include <vector>#include <algorithm>using namespace std; void main(){ // Повідомляємо вектор із цілих. vector <int> k; // Додаємо елементи в кінець вектора. k.push_back(22); k.push_back(11); k.push_back(4); k.push_back(100); vector <int>::iterator p; // Висновок невідсортованого вектора. for (p = k.begin(); p<k.end(); p++) { cout<<*p<<"\n"; } // Сортування вектора. sort(k.begin(), k.end()); // Висновок відсортованого вектора. cout<<"sorted:\n"; for (p = k.begin(); p<k.end(); p++) { cout<<*p<<"\n"; }}

Як ви бачите, головна частина в нашій програмі - це рядок

... // Сортування вектора. sort(k.begin(), k.end()); ...

При виклику функції sort ми вказуємо, від якого й до якого елементів ми робимо сортування. У нашому випадку ми сортуємо наш вектор від початку й до кінця.

Результатом виконання програми буде висновок чисел 4, 11, 22, 100 (саме в такому, відсортованому порядку).

Зверніть увагу, що функція sort не належить нашому вектору. Т. е. ми не пишемо щось начебто

... k.sort(...); ...

Т. е. наш метод сортування (як й інші алгоритми) утворить окрему підсистему в бібліотеці STL (поряд, наприклад, з контейнерами - тим же вектором, наприклад).

Алгоритм - шаблон функції, що виконує конкретне завдання (пошук, сортування й т.д.) над будь-якими контейнерами. Функція-алгоритм приймає як параметри iтератори або покажчики.

Приклад зберігання об'єктів у списку / динамічному масиві:

#include < list>

#include < vector>

using namespace std;

struct MyStruct

{

int A;

float B;

char C[50];

}

void main()

{

vector < MyStruct> arr;

 

MyStruct obj;

arr.push_back(obj);

arr[0].A = 123;

list < MyStruct> thelist;

thelist.push_back(obj);

thelist.push_back(obj);

thelist.push_back(obj);

for(list< MyStruct>::iterator i = thelist.begin(); i != thelist.end(); i++)

{

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

(*i).A = 123;

 

// а можна одержати посилання й працювати з нею:

MyStruct &thestruct = *i;

thestruct.B = -0.234;

strcpy(thestruct.C, "Some text");

}

}

приклад організації списка списків, масивів масивів і т.п.

У будь-якому контейнері можна зберігати вкладений контейнер. Для простоти запису, можна використати typedef-и:

#include < list>

#include < vector>

using namespace std;

// відключаємо попередження через занадто довгі імена типів

#pragma warning(disable: 4786)

void main()

{

typedef list< float> ListOfFloat; // список float-ов

typedef list< ListOfFloat> ListOfListOfFloat; // список списків float-ов

 

// як можна працювати зі списком списків:

ListOfListOfFloat thelist;

// додаємо 2 елементи в список списків:

thelist.resize(2);

// а можна й так:

ListOfFloat thelistinside;

thelistinside.push_back(-0.34f);

thelistinside.push_back(3.45f);

thelist.push_back(thelistinside);

// або от так:

thelist.push_back(ListOfFloat());

// проходимо в циклі по списках - зовнішньому й вкладеному

for(ListOfListOfFloat::iterator i1 = thelist.begin(); i1 != thelist.end(); i1++)

{

// для зручності, одержуємо посилання на вкладений список

ListOfFloat &thelistinside = *i1;

// проходимо по вкладеному списку

for(ListOfFloat::iterator i2 = thelistinside.begin(); i2 != thelistinside.end(); i2++)

{

float value = *i2;

}

}

}

 

Пояснення:

- створення списку й додавання елементів - за аналогією з vector-ом

- функції resize(), push_front(), clear(), begin() і інших - є в кожному контейнері (в vector-і в тому числі).

- copy(A, B, C) - алгоритм, що копіює всі елементи з контейнера або масиву, на який указує iтератор або покажчик C, у контейнер або масив, на який указують iтераторb або покажчики A й B, причому A указує на перший елемент, B указує на елемент, що перебуває після останнього елемента масиву або контейнера. Для будь-якого контейнера, У можна одержати за допомогою функції end(), для масиву - можна додати розмір масиву до покажчика на перший елемент (наприклад, values + 3).

- итератор ("псевдоуказатель") для кожного контейнера, створюваного нами, має свій відмінний тип. Для того, щоб оголосити iтератор i з контейнера

list< float>,

використається вираження

list< float> ::iterator i.

- як уже говорилося, для одержання значення, на яке вказує iтератор iтератор, використається зірочка: *i. Для переміщення за списком ми просто зрушуємо iтератор операцією ++.

- для того, щоб видалити елемент із "голови" або "хвоста" - використається пара функцій pop_front(), pop_back(). Для видалення довільного елемента використається функція erase(i), де i - це iтератор, що вказує на елемент.

- для вставки елемента в середину списку або масиву використається функція insert(i, v), де v - значення, що вставляє це, i - iтератор, що вказує на елемент, перед яким потрібно вставити значення.

 

– Конец работы –

Эта тема принадлежит разделу:

Навчальної дисципліни Основи програмування та алгоритмічні мови

ХАРКІВСЬКИЙ НАЦІОНАЛЬНИЙ ЕКОНОМІЧНИЙ УНІВЕРСИТЕТ... Методичні рекомендації до лабораторних робіт з навчальної дисципліни...

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Короткі теоретичні відомості

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

ЗАГАЛЬНІ ПОЛОЖЕННЯ
Методичні рекомендації призначені для виконання лабораторних робіт з першої частини навчальної дисципліни «Основи програмування та алгоритмічні мови». Перед виконанням кожної роботи необхі

Покажчики
Коли компілятор обробляє оператора визначення змінної, наприклад, int i =10, він виділяє пам'ять відповідно до типу (int) і ініціалізував її вка-заним значенням (10). Всі звернення в програмі до зм

Ініціалізація покажчиків
Покажчики найчастіше використовують при роботі з динамічною пам'яттю, званою деякими естетами купою (переклад з англійської мови слова heap). Це вільна пам'ять, в якій можна під час виконання прогр

Операції з покажчиками
З покажчиками можна виконувати наступні операції: разадресация, або непряме звернення до об'єкту (*), привласнення, складання з константою, віднімання, інкремент (++), декремент (--), порівняння, п

Рядки символів як масиви
Рядок має тип “масив з символів”. Рядок завершується нульовим символом. Наприклад, рядок QWERTY має тип char [7], порожній рядок “ має тип char[1]. Рядкова константа - це послідовні

Рядкові бібліотечні функції
Функції для роботи з рядками описані в заголовному файлі string.h. Деякі з них: char *stpcpy(char *dest, const char *src); Копіює символи рядка, поки не скопіює нульовий символ. П

Відкриття і закриття потоку
Схема роботи з потоком така ж, як і з файлом: відкрити потік, виконати читання і/або запис, закрити потік. Відкриває потік функція FILE* fopen( const char *filename,// ім

Введення і виведення рядків
Читання рядка з потоку виконується функцією char *fgets( char *s, // покажчик на буфер, що приймає рядок int n, // гранична кількість читаних символів (звичайно розмір бу

Форматоване виведення
Розглянуті вище функції виводять інформацію в потік без або майже без перетворення. Функція fprintf перетворить дані, що виводяться, в послідовність символів, керуючись рядком формату. int

Форматоване введення
Для форматованого введення з потоку застосовують функцію int fscanf (FILE *stream, const char *format [, address, ...] ) - повертає число полів введення тих, що

Варіант 20
Написати програму, яка: · Виводить текст на екран дисплея; · Визначає найбільшу кількість підряд пропусків, що йдуть, в тексті; · По натисненню довільної клавіші по черзі

Стадії і команди препроцесорної обробки
У інтегроване середовище підготовки програм на С++ в компілятор мови як обов'язковий компонент входить препроцесор. Призначення препроцесора - обробка початкового тексту програми до її компіляції.

Включення текстів з файлів
Для включення тексту з файлу використовується команда #include, що має дві форми запису: #include <имя_файла> // Ім'я в кутових дужках #include "имя_файла" // Ім'я

Умовна компіляція
Умовна компіляція забезпечується в мові С++ набором команд, які, по суті, управляють не компіляцією, а препроцесорною обробкою: #if константний вираз #ifdef ідентифікатор

Макропідстановки засобами препроцесора
Макрос, за визначенням, є засіб заміни однієї послідовності символів іншої. Для виконання замін повинні бути задані відповідні макроозначення. Просте макроозначення ми вже ввели, розглядаючи директ

Теоретичний матеріал
  Структури - це складені типи даних, побудовані з використанням інших типів. Вони є об'єднаний загальним ім'ям набір даних різних типів. Саме тим, що в ст

Масиви структур.
Методика створення масивів структур - така сама, як і при створенні масивів. Наприклад, що б створити масив з 100 екземплярів BestStudent структури Student, необхідний наступний запис: Stu

Варіант 3
Відомість використання машинного часу на обчислювальному центрі: № з/п Кафедра Використання машиного часу (год) Відхилення

Варіант 4
Відомість споживання електроенергії на заводах міста: № з/п Завод Потреба електроенергії, кВт/ч Відхилення від плана

Варіант 5
Відомість руху матеріалів на складах підприємства за звітний період: № п/п Склад Рух материалів за період, грн остаток на к

Варіант 8
Відомість відвідин занять студентами: № з/п Прізвище Пропущено годин Відхилення від плану за планом

Варіант 10
Відомість обліку часу роботи верстатів підприємства: № з/п Тип станка Час роботы (год) Відхилення від плану

Варіант 11
Відомість випуску деталей робітниками цеху: № з/п Прізвище Кількість деталей (шт.) Брак виготовлено

Варіант 13
Відомість нарахування зарплати співробітникам підприємства: № з/п Прізвище Нараховано (грн) Виплати

Варіант 17
Відомість оплати ремонту обладнання підприємства за звітний період: № зп Обладнання Вид ремонту Вартість комплектуючих

Варіант 20
Відомість телефонних переговорів абонента за звітний період: № зп Абонент № телефона Тривалість переговорів (хв.)

Варіант 20
Скласти програму, яка містить поточну інформацію про заявки на туристичні тури. Кожна заявка включає: · пункт призначення; · номер туру; · прізвище і ініціали за

Дослідження структури windows-додатка
  Ціль лабораторної роботи - одержання практичних навичок у побудові базового додатка для Win32, дослідження параметрів віконних процедур. Перед виконанням лабораторної робот

Перелік бітових прапорів стилю класу вікна
Прапор Опис CS _VREDRAW Перемалювати вікно при зміні висоти вікна CS_HREDRAW Перемал

Список визначених системних піктограм
Іконка Опис IDI_APPLICATION Піктограма додатка, задана за замовчуванням IDI_ASTERISK

Список визначених ідентифікаторів курсору
Курсор Опис IDC_APPSTARTING Стандартна стрілка й пісковий годинник. IDC_ARROW Станда

Перелік бітових прапорів стилю вікна
Прапор Опис WS_BORDER У вікна є тонка обмежуюча рамка WS_CAPTION WS_BORDER | WS_DLGF

Варіант № 20
Вікно повинне: · бути згорнутим; · мати власний контекст; · завантажувати іконку у вигляді молодого півмісяця; · мати курсор у вигляді двухконечной стрілки з нап

Дослідження взаємодії додатка з користувачем
  Ціль лабораторної роботи: Досліджувати можливості функцій Win32 API по створенню візуального інтерфейсу додатка, одержати практичні навички написання й настроювання програм, які міс

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

Створення меню
Що таке меню. Меню - це список команд й опцій програми. У ряді випадків пункти меню можуть бути представлені растровими зображеннями. Вибрати елемент меню можна за допомогою миші, клавіатури або пе

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

Розробка діалогового вікна
Для діалогового вікна необхідно скористатися відповідним редактором. Редактор діалогових вікон викликається в процесі реалізації ланцюжка дій ( Рис. 7.4).  

Компонування діалогового вікна
За допомогою миші розмістите поле й напис у потрібнім місці й задайте їхній розмір. Щиглик мишею усередині макета діалогового вікна дозволить відредагувати заголовок вікна або текстовий рядок, що н

Бітові прапори, що визначають поводження й вид елемента меню
Прапор Опис MF_BITMAP Замість рядка в якості меню застосовується bitmap MF_BYCOMMAND

Можливі типи рядка стану
Тип Опис SBT_NOBORDERS Панель прорисовується без обмежувальних ліній SBT_POPOUT Пане

Перелік бітових прапорів стилю вікна
Прапор Опис WS_BORDER У вікна є тонка обмежуюча рамка WS_CAPTION WS_BORDER | WS_DLGF

Стилі діалогового вікна
Прапор Ефект DS_ABSALIGN Позиціювати діалогове вікно щодо лівого верхнього кута екрана DS_SYSMODA

Таблиця 7.5
Стилі вікон класу "кнопки" Стиль Опис BS_3STATE Створити прапорець, що має три стани

Варіант № 3
Головне меню містить три групи команд: · Головне меню містить розділ "Фігури" з іменами геометричних фігур: коло, квадрат, трикутник, прямокутник і шестикутник. При виборі назви

Варіант № 11
Головне меню містить три групи команд: · Розділ "Файл" головного меню містить рядка "Створити", "Відкрити", "Демо-версiя" й "Вихід". При в

Варіант № 13
Головне меню містить три групи команд: · Робочу область вікна додатка повністю займає тимчасове вікно з порожнім головним меню. Головне меню вікна додатка із тримає розділ "Файл"

Варіант № 17
Головне меню містить три групи команд: · Головне меню містить розділ "Файл" з рядками "Створити", "Відкрити", "Видалити" й "Вихід". При ви

Варіант № 18
Робочу область вікна додатка, повністю займає тимчасове вікно з порожнім головним меню. Головне меню вікна додатка містить розділ "Файл" з рядками "Відкрити" й "Закрити&quo

Варіант № 20
· Тип елемента керування: Combobox. Мінімальне число пунктів меню - 5, максимальне число пунктів меню - 11. · Перша сторінка блокнота містить назви книг, друга - на звання глав обраної кни

Короткі теоретичні відомості й історичний аспект
  Середовище .NET Framework   .NET Framework — центральна частина Visual C++ 2005, як і всіх інших засобів розробки .NET компанії Microsoft. Середовище .NET Fra

Специфіка C++/CLI: фундаментальні типи даних
Фундаментальні типи ISO/ANSI C++ можна використати у своїх програмах C++/CLI, і з арифметичними операціями вони працюють точно так само, як й у рідному C++. Крім того, в C++/CLI визначені два додат

Фундаментальні типи C++/CLI
Фундаментальний тип Розмір (у байтах) Клас значень CLI bool System: -.Boolean

Створення простого керованого консольного додатка.
Для створення консольного додатка на керованому C++ варто виконати наступну послідовність операцій:   1. Запустите на виконання Visual Studio. NET (2005 або більше нової)

Стандартний ввід-вивід
Клас System::Console забезпечує підтримку стандартного вводу-висновку. Метод ReadLine класу System::Console зчитує уведену із клавіатури рядок як текстову. String^ line = Console::ReadLine

Часто використовувані специфікатори формату
Специфікатор формату Опис C або з Виводить значення в грошовому форматі. dабо d Виво

Часто використовувані специфікатори формату
Специфікатор формату Опис C або з Виводить значення в грошовому форматі. dабо d Виво

Дескриптори, що відслідковують
Дескриптори, що відслідковують, (tracking handle) мають подібність із рідними покажчиками C++, однак є й істотні відмінності. Дескриптор зберігає адреса, і адреса, що у ньому втримується, автоматич

Оголошення дескрипторів, що відслідковують
Для специфікації дескриптора типу, необхідно помістити символ : (часто називаний "капелюхом") слідом за ім'ям типу. Наприклад, от як можна оголосити відслідковує дескриптор, що, по імені

Масиви CLR
Масиви CLR відрізняються від масивів рідного C++. Пам'ять для масиву CLR виділяється в керованій купі, але це ще не все. Масиви CLR мають убудовану функціональність, який немає в масивів рідного C+

Багатомірні масиви
У програмах на C++/CLI можна створювати масиви із двома й більше вимірами; максимальна кількість вимірів масиву - 32, чого цілком достатньо в більшості випадків. Кількість вимірів масиву вказується

Багатомірні масиви
У програмах на C++/CLI можна створювати масиви із двома й більше вимірами; максимальна кількість вимірів масиву - 32, чого цілком достатньо в більшості випадків. Кількість вимірів масиву вказується

Цикл foreach
При обробці масивів і рядків дуже часто, використають оператори циклів. Всі оператори циклів, які застосовуються в мові ISO/ANSI C++, також використаються й у и в C++/CLI. Але мова C++/CLI пропонує

Варіант 20
В одномірному масиві, що складається з п речовинних елементів, обчислити: o добуток позитивних елементів масиву; o суму елементів масиву, розташованих до мінімального елемента.

Навчальне видання
  Методичні рекомендації до лабораторних робіт з навчальної дисципліни «Основи програмування та алгоритмічні мови» Частина 2 для студентів напряму

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги