В мові програмування 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++.
Див. також
Примітки