Цей розділ знаходиться в документації по Visual C ++ як непрацюючий прикладом контейнери, які використовуються в стандартній бібліотеці C ++. Додаткові відомості див. У розділі контейнери STL.
Описує об'єкт, керуючий послідовністю елементів, зазвичай типу змінної довжини Ty. Послідовність зберігається по-різному в залежності від фактичних контейнера.
Може виявитися контейнера конструктора або функції-члена, викличте конструктор в рідкісних випадках Ty (const Ty ) Або функція Ty :: operator = (const Ty ). Якщо такий виклик породжує виключення, об'єкт-контейнер є obliged для збереження цілісності і заново створити будь-який виняток, він перехоплює. Можна безпечно заміни, призначити, видалити або знищити об'єкт контейнера, після його створює одне з цих винятків. В цілому проте, неможливо в іншому випадку передбачити стан послідовності, контрольованої об'єкт контейнера.
Кілька додаткових попередження:
Ty створив виняток, результуюче стан об'єкта контейнера не визначене.
Якщо контейнер, які зберігають об'єкт розподільника al. і al викликає виняток, відмінне від в результаті виклику al.allocate. результуюче стан об'єкта контейнера не визначене.
Якщо контейнер зберігає об'єкт функції comp. щоб визначити спосіб упорядкування керованої послідовності і comp видає виключення будь-якого типу, результуюче стан об'єкта контейнера не визначене.
Класи контейнерів, який визначається STL задовольняють кілька додаткових вимог, як описано в наступних абзацах.
Клас шаблонів контейнерів списку забезпечує поведінку детермінованих і корисні, навіть при наявності винятків, описаних вище. Наприклад якщо виняток під час вставки одного або більше елементів контейнера змінюється, а виняток створюється знову.
Для все контейнера класи, певні STL, якщо виключення при виклику наступної функції-члени:
Функція-член стерти виняток тільки в тому випадку, якщо операція копіювання (призначення або копіювання конструкція) викликає виняток.
Крім того виняток не виникає при копіюванні итератор, що повертається функцією-членом.
Функція-член заміни забезпечує додаткових переваг все визначається STL класи контейнерів:
Функція-член тільки в тому випадку, якщо контейнер зберігає al об'єкт розподільника, створюється виключення і al викликає виключення при копіюванні.
Посилання, покажчики і ітератори, що позначають елементи керованої послідовності їх перемиканням залишаються дійсними.
Об'єкт класу контейнера, який визначається STL виділяє і звільняє сховище для послідовності, вона управляє через збережений об'єкт типу Alloc. який зазвичай є параметром шаблону. Такий об'єкт розподільника повинен мати такий же зовнішній інтерфейс, як об'єкт класу розподільника
Для всіх класів контейнерів визначається STL, функція-член get_allocator Alloc const; повертає копію збережений об'єкт розподільника. Зверніть увагу, що збережений об'єкт розподільника не буде копіюватися при призначається об'єкт контейнера. Всі конструктори виконують ініціалізацію значення, що зберігається в розподільника. в Alloc Якщо конструктор містить параметр не розподільника.
Відповідно до стандарту C ++ клас контейнера, який визначається STL можна припускати, що:
Всі об'єкти класу Alloc порівняння рівності.
Тип Alloc :: const_pointer збігається const Ty *.
Тип Alloc :: const_reference збігається const Ty .
Проте, в цій реалізації контейнери не робити такі спрощуючи припущень. Таким чином вони коректно працювати з об'єктами розподільника, які є більш істотних:
Всі об'єкти класу Alloc не потрібно порівнювати рівні. (Можна підтримувати кілька пулів носіїв).
Тип Alloc :: const_pointer не повинні збігатися з const Ty *. (Константний покажчик може бути класом.)
Тип Alloc :: pointer не повинні збігатися з Ty *. (Покажчик може бути класом.)