Українська
Підсумки
Висновки
Контейнер вибирають за операціями, ключами, потребою в порядку, дублікатах і стабільності елементів, а не за знайомою назвою. Позначення складності описує зростання кількості операцій і має передумови, тому фактичну вартість перевіряють відтворюваним експериментом. vector зберігає елементи неперервно й розрізняє size та capacity, а span лише позичає пам’ять власника. deque, list і forward_list мають інші гарантії доступу, вставки та чинності посилань і ітераторів. У set і map унікальність визначає еквівалентність компаратора, а методи доступу по-різному поводяться з відсутнім ключем. Хешовані контейнери потребують узгоджених рівності й хеша, допускають колізії та не гарантують порядку обходу. Адаптери навмисно звужують інтерфейс до правил LIFO, FIFO або пріоритету. Після кожної зміни структури варто перевіряти інваріанти даних, а не лише підсумковий звіт.
Питання для самоперевірки
- Чим size відрізняється від capacity?
- Чому span не подовжує час життя вектора?
- Коли стала вставка у list не дає сталої вартості всієї операції?
- Чим еквівалентність компаратора відрізняється від ==?
- Які методи map можуть додати відсутній ключ?
- Що означає колізія і чому вона допустима?
- Який зв’язок між рівністю ключів і хеш-функцією?
- Чим відрізняються гарантії ітератора та посилання після rehash?
- Як забезпечити стабільну нічию у
priority_queue? - Чому mdspan не слід називати контейнером-власником?
Контрольні питання до лабораторної роботи
- Який інваріант забезпечує контейнер у вашому варіанті?
- Чи потрібні дублікати та в якому сенсі ключі рівні?
- Яка операція може зробити ваш ітератор недійсним?
- Чи має виміряний час однакові умови для всіх контейнерів?
- Як перевірено відсутній елемент?