Стандартна бібліотека C++

В мові програмування C++, Стандартна бібліотека C++ це набір класів і функцій, які написані на базовій мові і є частиною стандарту C++ ISO.[1] Стандартна бібліотека C++ реалізує набір базових контейнерів, функцій для використання і управління цими контейнерами, функціональних об'єктів, загальні строки та потоки (включаючи взаємодію і файловий ввід/вивід), підтримку деяких особливостей мови програмування, і звичайні функції для вирішення таких задач, як пошук квадратного кореня числа. Стандартна бібліотека C++ також містить 18 заголовкових файлів стандарту ISO C90 Стандартної бібліотеки C які мають розширення ".h", але їх використання не рекомендується, оскільки вони є застарілими.[2] Не існує інших заголовкових файлів із розширенням ".h". Всі функції і компоненти бібліотеки знаходяться в просторі імен std.

Стандартна бібліотека C++ ґрунтується на конвенціях, введених в Стандартній бібліотеці шаблонів (STL), яка виникла під впливом досліджень в галузі узагальненого програмування і розробників STL такими як Александр Степанов і Мен Лі.[3][4] Хоча Стандартна бібліотека C++ і STL мають багато спільного, жодна з них не є чіткою надбудовою над іншою.

Важливою особливістю стандартної бібліотеки C++ є те, що вона не тільки визначає синтаксис і семантику узагальнених алгоритмів, а й також має вимоги щодо їх продуктивності.[5] Ці вимоги продуктивності часто відповідають добре відомому алгоритму, що очікується буде використаний, але не є обов’язковим. В більшості випадків вимагається лінійний час O(n) або логарифмічний час O(n log n) зростання, але в деяких випадках вищі обмеження дозволяються, такі як квазілінійний час O(n log2 n) для стабільного сортування (щоб реалізувати послідовного сортування злиттям). Попереднє сортування вимагало лише O(n log n) кроків в середньому, дозволяючи використовувати швидке сортування, яке є швидким на практиці, але має низьку ефективність у найгіршому випадку, але був запропонований алгоритм introsort, що забезпечило високу середню ефективність в найгіршому сценарії і високу швидкість, і як в стандарті C++11, сортування гарантовано повинно бути лінеаритмічне. В інших випадках вимоги залишаються вільнішими, наприклад для алгоритму відбору, який в середньому повинен були як мінімум лінійний (як при швидкому виборі),[6] не приділяючи уваги найгіршому випадку як в introselect.

Стандартні файли заголовків[ред. | ред. код]

В наступних файлах знаходяться декларації Стандартної бібліотеки C++.

Контейнери[ред. | ред. код]

<array>
Новий в стандарті C++11 і TR1. Реалізує шаблонний клас контейнер std::array, для масиву з фіксованим розміром.
<bitset>
Реалізує спеціалізований клас контейнеру std::bitset, що є бітовим масивом.
<deque>
Реалізує шаблонний клас контейнер std::deque, що є двобічною чергою.
<forward_list>
Новий в стандарті C++11 і TR1. Реалізує шаблонний клас контейнер std::forward_list, що є Однозв'язним списком.
<list>
Реалізує шаблонний клас контейнер std::list, що є двобічно зв'язним списком.
<map>:Забезпечує шаблони класу контейнера std::map і std::multimap, відсортований асоціативний масив і мультимап.
<queue>
Забезпечує клас адаптеру контейнера std::queue, що є однобічною чергою, і std::priority_queue, що є чергою з пріоритетом.
<set>
Забезпечує шаблони класу контейнера std::set і std::multiset, що реалізує відсортовані асоціативні контейнери або множини.
<stack>
Забезпечує клас адаптеру контейнера std::stack, що реалізує стекову структуру.
<unordered_map>
Новий в стандарті C++11 і TR1. Реалізує шаблонний клас контейнер std::unordered_map[en] і std::unordered_multimap, хеш-таблиці.
<unordered_set>
Новий в стандарті C++11 і TR1. Реалізує шаблонний клас контейнер std::unordered_set[en] і std::unordered_multiset.
<vector>
Шаблонний клас контейнер std::vector, що реалізує динамічний масив.

Основні[ред. | ред. код]

<algorithm>
Містить визначення багатьох алгоритмів для контейнерів.
<chrono>
Реалізує елементи для роботи з часом, такі як std::chrono::duration, std::chrono::time_point, і годинники.
<functional>
Забезпечує декілька об'єктів функторів, розроблених для використання із стандартними алгоритмами.
<iterator>
Забезпечує класи і шаблони для роботи з ітераторами.
<memory>
Забезпечує засоби для управління пам'яттю в C++, включаючи клас шаблону std::unique_ptr.
<stdexcept>
Містить стандартні класи для виключних ситуацій такі як std::logic_error і std::runtime_error, що обидва наслідуванні від std::exception.
<tuple>
Новий в стандарті C++11 і TR1. Забезпечує клас шаблону std::tuple, що реалізує кортеж.
<utility>
Забезпечує клас шаблону std::pair, для роботи з парами об'єктів (кортежі для двох класів), і простір імен std::rel_ops, для легшого перевантаження операторів.

Локалізація[ред. | ред. код]

<locale>
Визначає класи і оголошує функції, які зберігають і управляють інформацією, що властива локалі.
<codecvt>
Забезпечує код для перетворення даних у відповідності до різних кодувань.

Рядки[ред. | ред. код]

<string>
Пропонує стандартні C++ класи і шаблони для роботи зі рядками.
<regex>
Новий в стандарті C++11. Забезпечує утиліті для співставлення шаблонів строк з використанням регулярних виразів.

Потоки і Ввід/Вивід[ред. | ред. код]

<fstream>
Забезпечує засоби для файлового вводу виводу. Див. fstream.
<iomanip>
Забезпечує засоби для форматування виводу, такі як форматування цілих чисел з різними базисом і точністю числа з рухомою комою.
<ios>
Забезпечує набір базових типів і функцій для роботи iostreams.
<iosfwd>
Забезпечує [[Попереднє оголошення|попередні оголошення] декількох шаблонів класів, що мають справу з вводом/виводом.
<iostream>
Забезпечує основи введення в виводу в C++. Див. iostream.
<istream>
Забезпечує шаблонний клас std::istream і інші допоміжні класи для вводу.
<ostream>
Забезпечує шаблонний клас std::ostream і інші допоміжні класи для виводу.
<sstream>
Забезпечує шаблонний клас std::sstream і інші допоміжні класи для маніпуляцій зі строками.
<streambuf>
Забезпечує функціональність читання і запису із/в символьні послідовності конкретних типів, такі як зовнішні файли або рядки.

Підтримка конструкцій мови[ред. | ред. код]

<exception>
Містить набір типів і функцій пов'язаних з обробкою виняткових ситуацій, включаючи std::exception, базовий клас для всіх винятків (exceptions), які генеруються Стандартною бібліотекою.
<limits>
Забезпечує шаблонний клас std::numeric_limits, який використовується для описання властивостей фундаментальних числових типів.
<new>
Містить оператори new і delete і інші функції і типи, що являють собою фундаментальні засоби управління пам'яттю в C++.
<typeinfo>
Забезпечує засоби для роботи з інформацією про тип під час виконання C++.

Бібліотека підтримки потоків[ред. | ред. код]

<thread>
Новий в стандарті C++11. Містить клас і простір імен для роботи з потоками.
<mutex>
Новий в стандарті C++11. 30.4-1 Цей розділ містить механізми для роботи з взаємними блокуваннями: м'ютекси, блокування, і забезпечення виклику один раз.
<condition_variable>
Новий в стандарті C++11. 30.5-1 Умовні змінні забезпечують примітиви синхронізації, які використовують блокування потоку, доки інший потік повідомить про те, що програма досягла деякої умови або досягла деякого системного часу.
<future>
Новий в стандарті C++11. 30.6.1-1 Описує компоненти, які програма C++ може використовувати для отримання результату (значення або виключення) в одному конкретному потоці після виконання функції, яка запускається в тому ж потоці, або в іншому.

Числова бібліотека[ред. | ред. код]

Компоненти, які програма C++ може використовувати для виконання напівчислових операцій.

<complex>
Заголовок <complex> визначає шаблонний клас, і набір функцій для роботи з комплексними числами.
<random>
Можливість генерувати (псевдо-)випадкові числа
<valarray>
Визначає п'ять шаблонів класів (valarray, slice_array, gslice_array, mask_array, і indirect_array), два класи (slice і gslice), і множину пов'язаних з ними шаблонів функцій для представлення і маніпуляції над масивами значень.
<numeric>
Узагальнені числові операції.

Стандартна бібліотека C[ред. | ред. код]

Кожен заголовок із Стандартної бібліотеки C включено в Стандартну бібліотеку C++ під іншим ім'ям, за рахунок того, що було усунуте закінчення .h, і додано 'c' на початку; наприклад, 'time.h' перетворився на 'ctime'. Єдиною різницею між цими файлами заголовків і тими, що були в Стандартній бібліотеці C це те, що там де це було можливо функції мають знаходитись в просторі імен std::. В ISO C, функції в стандартній бібліотеці могли реалізовуватись за допомогою макросів, що не є дозволеним в ISO C++.

Див. також[ред. | ред. код]

Примітки[ред. | ред. код]

  1. ISO/IEC 14882:2003(E) Programming Languages — C++ §17-27
  2. ISO/IEC 14882:2003(E) Programming Languages — C++ §D.5
  3. Bjarne Stroustrup (1994). The Design and Evolution of C++ §8.5. Addison Wesley. ISBN 0-201-54330-3.
  4. Alexander Stepanov, Meng Lee (1 серпня 1994). The Standard Template Library. HP Labs. Архів оригіналу за 3 березня 2016. Процитовано 2 December 2011.
  5. "Generic Algorithms", David Musser
  6. nth_element