рігаються в deque. Аллокатор, використовуваний deque, специфікований Allocator; за замовчуванням це стан- дротяні клас для аллокаторов. Для переважної більшості додатків ви будете просто застосовувати аллокатор за замовчуванням, то ж стосується всього коду цієї глави. Однак ви можете визначати власні типи аллокаторов, коли потрібна спеціальна схема виділення пам'яті.
2.1.4 Ітератори
Ітератори - це об'єкти, які поводяться більш-менш подібно вказівниками. Вони надають можливість виконувати циклічну обробку елементів контейнера - подібно до того, як ви використовуєте покажчик для організації циклу по масиву. Існує п'ять типів ітераторів (см.ріс.2)
Рис.2-Типи ітераторів
Взагалі ітератор, що має більш широкі можливості доступу, може застосовуватися замість ітератора з меншими можливостями. Наприклад, прямий ітератор може бути використаний замість вхідного ітератора. Ітератори обробляються подібно вказівниками. Зворотні ітератори небудь двунаправлен, або довільного доступу, що переміщуються по послідовності в зворотному напрямку. Таким чином, якщо зворотний ітератор указує на кінець послідовності, то збільшення цього ітератора на одиницю перемістить його на елемент, що передує кінцевому.
Всі ітератори повинні підтримувати типи операцій з покажчиками, допустимі для їх категорії. Наприклад, клас вхідного ітератора повинен підтримувати операції - gt ;, ++, *, == і! =. Більше того, операція * не може використовуватися для присвоювання значення.
На відміну від вхідного, ітератор довільного доступу повинен підтримувати операції - gt ;, +, ++, -, -, *, lt ;, gt ;, lt; =, gt; =, -=, + =, ==,!=і [].
Вдобавок операція * повинна дозволяти присвоювання. Операції, підтримувані кожним типом ітераторів, перераховані нижче (см.ріс.3).
Рис.3-операется ітераторів
При посиланнях на різні типи ітераторів в описах шаблонів будуть використані такі терміни (см.ріс.4).
Рис.4-Терміни ітераторів
. 1.5 Алгоритми
Алгоритми виконують дії над контейнерами. Їх можливості включають ініціалізацію, сортування, пошук, злиття, заміну і трансформацію вмісту контейнера. Багато алгоритми оперують діапазонами елементів в контейнері.
Алгоритми:
find () - цей алгоритм шукає перший елемент у контейнері, значення якого дорівнює зазначеному. () - підраховує, скільки елементів в контейнері мають дане значення. () - алгоритм сортування. () - шукає цілу послідовність значень, задану одним контейнером, в іншому контейнері. () - цей алгоритм працює з трьома контейнерами, об'єднуючи елементи двох з них в третій, цільової контейнер._each () -цей алгоритм дозволяє виконувати якусь дію над кожним елементом в контейнері. Ви пишете власну функцію, щоб визначити, яка саме дія слід виконувати. Ця ваша функція не має права модифікувати дані, але вона може їх виводити або використовувати їх значення у своїй роботі. () - Цей алгоритм теж робить щось з кожним елементом контейнера, але ще і поміщає результат в інший контейнер (або в той же ). Знову ж таки, пользовательcкая функція визначає, що саме робити з даними, причому тип повертається нею результату повинен відповідати типу цільового контейнера.
2.1.6 Списки і їхні методи
Контейнер STL під назвою список являє собою двічі зв'язний список, в якому кожен елемент зберігає покажчик на сусіда зліва і справа. Контейнер містить адресу першого і останнього елементів, тому доступ до обох кінців списку здійснюється дуже швидко.
Методи._front (), front () і pop_front () аналогічні методам pop_back () з векторів.
. 1.7 Вектор. Його методи і переваги
Вектори - це, так би мовити, розумні масиви. Вони займаються автоматичним розміщенням себе в пам'яті, розширенням і звуженням свого розміру в міру вставки або видалення даних. Вектори можна використовувати в якійсь мірі як масиви, звертаючись до елементів за допомогою звичного оператора []. Випадковий доступ виконується дуже швидко у векторах. Також досить швидко здійснюється додавання (або проштовхування) нових даних в кінець вектора. Коли це відбувається, розмір вектора автоматично збільшується для того, щоб було, куди покласти нове значення.
Так само існує досить велика кількість корисних методів для вектора: _back () - вставляє значення свого аргументу в кінець вектора () - повертає поточне число елементів, що містяться в контейнері. () - обмінює дані одного вектора на дані іншого, при цьому порядок проходження елементів не змінюється () - повертає значення останнього ел...