Стандартна бібліотека 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++ під іншим ім'ям, за рахунок того, що було усунуте закінчення .h, і додано 'c' на початку; наприклад, 'time.h' перетворився на 'ctime'. Єдиною різницею між цими файлами заголовків і тими, що були в Стандартній бібліотеці C це те, що там де це було можливо функції мають знаходитись в просторі імен std::. В ISO C, функції в стандартній бібліотеці могли реалізовуватись за допомогою макросів, що не є дозволеним в ISO C++.
- Apache C++ Standard Library
- Boost
- Бібліотека C POSIX
- Стандартна бібліотека C
- Стандартна бібліотека
- C++ Technical Report 1
- ↑ ISO/IEC 14882:2003(E) Programming Languages — C++ §17-27
- ↑ ISO/IEC 14882:2003(E) Programming Languages — C++ §D.5
- ↑ Bjarne Stroustrup (1994). The Design and Evolution of C++ §8.5. Addison Wesley. ISBN 0-201-54330-3.
- ↑ Alexander Stepanov, Meng Lee (1 серпня 1994). The Standard Template Library. HP Labs. Архів оригіналу за 3 березня 2016. Процитовано 2 December 2011. [Архівовано 2016-03-03 у Wayback Machine.]
- ↑ "Generic Algorithms", David Musser
- ↑ nth_element