Standardní knihovna C++
From Wikipedia, the free encyclopedia
Remove ads
Standardní knihovna C++ je kolekce tříd a funkcí pro programovací jazyk C++ napsaných v C++, která je součástí ISO normy jazyka C++.[1]
Úvod
Standardní knihovna C++ poskytuje různé obecné kontejnery, funkce pro jejich použití a manipulaci s nimi, funkční objekty, obecné řetězce a proudy (včetně interaktivních a souborových vstupů a výstupů), podporu některých vlastností jazyka a funkce pro běžné úlohy např. výpočet druhé odmocniny čísla. Standardní knihovna C++ také obsahuje většinu hlavičkových souborů standardní knihovny jazyka ISO C s příponou .h
, ale jejich použití nebylo doporučované (toto nedoporučování bylo zrušeno v C++23[2]).[3] C++23 naopak považuje tyto hlavičkové soubory za užitečné pro interoperabilitu s jazykem C, ale nedoporučuje jejich použití mimo programy, které mají být platnými programy v jazyce C i C++. Žádné jiné hlavičkové soubory ve Standardní knihovně C++ nemají příponu .h
. Prvky Standardní knihovny C++ jsou deklarovány ve jmenném prostoru std
.
Standardní knihovna C++ používá konvence, které zavedla Standard Template Library (STL), a byla ovlivněna výzkumy v oblasti generického programování a vývojáři STL, jako je Alexander Stepanov a Meng Lee.[4][5] Přestože Standardní knihovna C++ a STL sdílejí mnoho vlastností, ani jedna není vlastní nadmnožinou druhé.[zdroj?]
Významným rysem Standardní knihovny C++ je, že nejen udává syntaxi a sémantiku obecných algoritmů, ale také klade požadavky na jejich výkonnost.[6] Tyto výkonnostní požadavky často odpovídají dobře známému algoritmu, jehož použití se očekává, ale nevyžaduje. V mnoha případech je vyžadován lineární čas O(n) nebo lineárně logaritmický čas O(n log n), ale v některých případech je povolena vyšší složitost, např. kvazilineární čas O(n log2 n) pro stabilní třídění (aby bylo možné stabilní třídění slučováním na místě). Dříve se vyžadovalo, aby třídění mělo v průměrném případě složitost nejvýše O(n log n), což umožňovalo použít rychlého řazení, který je v praxi rychlé, ale má špatnou výkonnost v nejhorším případě, ale byl zaveden Introsort, který poskytuje jak velkou výkonnost v průměrném případě, tak optimální složitost v nejhorším případě, a od jeho implementace v C++11 je zaručeno, že třídění bude přinejhorším lineárně logaritmické. V jiný případech zůstávají požadavky volnější, např. u algoritmu výběru, u něhož se vyžaduje pouze lineární složitost v průměrném případě (kterou má quickselect),[7] nikoli lineární složitost v nejhorším případě, jakou má introselect.
Standardní knihovna C++ prošla první ISO standardizací v rámci standardizačního úsilí ISO zaměřeného na jazyk C++ v 90. letech 20. století. Od roku 2011 je rozšiřována a aktualizována každé tři roky[8] s každou revizí normy C++.
Remove ads
Implementace
Nevyvíjená
Apache Standardní Knihovna C++
Další implementací s otevřeným zdrojovým textem je Standardní knihovna Apache C++. Původně ji komerčně vyvíjela firma Rogue Wave Software, která ji později věnovala nadaci Apache Software Foundation.[9] Po více než pět letech bez vydání se však správní rada Apache Software Foundation rozhodla projekt ukončit a přesunout jej do projektu Apache Attic.[10] Následující knihovny implementují větší část Standardní knihovny C++:
Remove ads
Standardní moduly
Moduly byly zavedeny v C++20, ale jejich podpora ve Standardní knihovně neexistovala až do verze C++23. Tyto pojmenované moduly byly přidány tak, aby zahrnovaly všechny položky deklarované v globálním jmenném prostoru i ve jmenném prostoru std
, které jsou poskytované importovatelnými standardními hlavičkovými soubory. Makra nesmějí být exportovatelná, takže uživatelé musí ručně vkládat nebo importovat hlavičkové soubory, které emitují makra pro použití.
std
- Exportuje všechny deklarace ve jmenném prostoru
std
a globální funkce pro přidělování a uvolňování paměti, které jsou k dispozici v importovatelných hlavičkách C++ knihovny obsahujících nástroje z libc (i když jsou deklarovány ve standardním jmenném prostoru). std.compat
- Exportuje stejné deklarace jako pojmenovaný modul
std
, a navíc exportuje funkce v globálním jmenném prostoru v libc nástrojích.
Standardní hlavičkové soubory
Následující hlavičkové soubory obsahují deklarace Standardní knihovny C++.
Obecné
<any>
- Od verze C++17. Definuje typově bezpečnou třídu
std::any
, která podobně jakovoid *
plní úlohu libovolného typu.[11]
<atomic>
- Od verze C++11. Poskytuje šablonu třídy
std::atomic
, několik jejích šablonových specializací a další atomické operace. <chrono>
- Poskytuje časové prvky, např.
std::chrono::duration
,std::chrono::time_point
a hodiny. Od verze C++20 bylo přidáno velké množství časových vlastností: kalendaře, časové zóny, další hodiny a formátování řetězců s časovými údaji. <concepts>
- Od verze C++20. Poskytuje základní knihovnu konceptů.
<expected>
- Od verze C++23. Poskytuje šablonu třídy
std::expected
, výsledkový typ navržený pro rozlišení, zda funkce skončila normálně (a vrácení hodnoty) nebo chybou. <functional>
- Poskytuje několik funkčních objektů navržených pro použití se standardními algoritmy.
<generator>
- Od verze C++23. Poskytuje generátor korutin, který navíc podporuje vnořené yield operace nad rozsahy.
<memory>
- Poskytuje nástroje pro správu paměti v C++ včetně šablony třídy
std::unique_ptr
. <memory_resource>
- Od verze C++17. Poskytuje nástroje pro vytváření polymofních alokátorů paměti, jejichž chování se může měnit za běhu.[12]
<optional>
- Od verze C++17. Poskytuje šablonu třídy nepovinného typu
std::optional
, která rozšíří libovolný typ o prázdnou (neexistující, nedefinovanou) hodnotustd::nullopt
. <scoped_allocator>
- Od verze C++11. Poskytuje
std::scoped_allocator_adaptor
. <stacktrace>
- Od verze C++23. Poskytuje operace sledování zásobníku.
<stdexcept>
- Obsahuje standardní třídy výjimek, např.
std::logic_error
astd::runtime_error
odvozené odstd::exception
. <system_error>
- Od verze C++11. Definuje
std::error_code
<tuple>
- Od verze C++11 a TR1. Poskytuje šablonu třídy
std::tuple
pro uspořádané n-tice. <type_traits>
- Od verze C++11. Poskytuje nástroje pro práci s typy při metaprogramování.
<utility>
- Poskytuje různé nástroje: šablonu třídy
std::pair
(uspořádané dvojice), posloupnosti celých čísel použitelné v době překladu, pomocníky při konstrukci slovníkových typů, funkce jakostd::move
astd::forward
a mnohé další. Jmenný prostorstd::rel_ops
pro automatické generování operátorů porovnání je v C++20 nedoporučovaný a místo něj by se měly používat nové výchozí operátory porovnání. <variant>
- Od verze C++17. Šablona třídy
std::variant
pro vytváření variantních záznamů (unionů) s rozlišovací položkou.
Jazyková podpora
<compare>
- Od verze C++20. Poskytuje podporu operátor trojcestného porovnání.
<coroutine>
- Od verze C++20. Poskytuje podporu koprogramů.
<exception>
- Poskytuje několik typů a funkcí pro práci s výjimkami, včetně bázové třídy
std::exception
všech výjimek, které vyhazuje standardní knihovna. <initializer_list>
- Od verze C++11. Poskytuje podporu inicializačních seznamů.
<limits>
- Poskytuje šablonu třídy
std::numeric_limits
popisující vlastnosti základních numerických typů. <new>
- Poskytuje operátory
new
adelete
a jiné funkce a typy tvořící základy správy paměti v C++. <source_location>
- Od verze C++20. Poskytuje zachycení informací o místě ve zdrojovém kódu alternativní k předdefinovaným makrům např.
__LINE__
. <stdfloat>
- Od verze C++23. Poskytuje podmíněnou podpory pro rozšířené typy s pohyblivou řádovou čárkou.
<typeinfo>
- Poskytuje nástroje pro práci s C++ RTTI.
<version>
- Od verze C++20. Poskytuje informace o implementaci Standardní knihovny C++.[13]
Kontejnery
<array>
- Od verze C++11 a TR1. Poskytuje šablonu kontejnerové třídy
std::array
, kontejner pro pole pevné velikosti. <bitset>
- Poskytuje specializovanou kontejnerovou třídu
std::bitset
pro bitové pole. <deque>
- Poskytuje šablonu kontejnerové třídy
std::deque
, fronta s přístupem na obou koncích. <flat_map>
- Od verze C++23. Poskytuje šablony tříd adaptérů kontejneru
std::flat_map
astd::flat_multimap
. <flat_set>
- Od verze C++23. Poskytuje šablony tříd adaptérů kontejneru
std::flat_set
astd::flat_multiset
. <forward_list>
- Od verze C++11 a TR1. Poskytuje šablonu kontejnerové třídy
std::forward_list
, jednoduchý spojový seznam. <list>
- Poskytuje šablonu kontejnerové třídy
std::list
, obousměrný spojový seznam. <map>
- Poskytuje šablonu kontejnerové třídy
std::map
astd::multimap
, setříděné asociativní pole a multimap. <mdspan>
- Od verze C++23. Poskytuje šablonu třídy
std::mdspan
podobnéstd::span
, ale s vícerozměrným pohledem. <queue>
- Poskytuje třídy adaptéru kontejneru
std::queue
, frontu s jedním koncem, astd::priority_queue
prioritní frontu. <set>
- Poskytuje šablonu kontejnerové třídy
std::set
astd::multiset
, setříděné asociativní kontejnery nebo množiny. <span>
- Od verze C++20. Poskytuje šablonu třídy
std::span
, nevlastnící pohled, které se vztahuje na libovolný souvislý rozsah. <stack>
- Poskytuje kontejnerovou třídu adaptéru
std::stack
, zásobník. <unordered_map>
- Od verze C++11 a TR1. Poskytuje kontejnerovou šablonu třídy
std::unordered map
astd::unordered_multimap
, hašovací tabulky. <unordered_set>
- Od verze C++11 a TR1. Poskytuje kontejnerovou šablonu třídy
std::unordered_set
astd::unordered_multiset
. <vector>
- Poskytuje šablonu třídy kontejneru
std::vector
, dynamické pole.
Iterátory a rozsahy
<algorithm>
- Poskytuje definice mnoha algoritmů pro použití s kontejnery a rozsahy.
<execution>
- Od verze C++17. Poskytuje prováděcí pravidla pro paralelizované algoritmy.
<iterator>
- Poskytuje třídy a šablony pro práci s iterátory.
<numeric>
- Zobecněné numerické algoritmy.
<ranges>
- Od verze C++20. Poskytuje nástroje pro práci s rozsahy a adaptéry pro odložené vyhodnocování.
Localizace
<codecvt>
- Poskytuje konverze pro různá kódování znaků. Tento hlavičkový soubor je nedoporučovaný od C++17.
<locale>
- Definuje třídy a deklaruje funkce, které zapouzdřují informace pro národní zvyklosti a manipulují s nimi.
<text_encoding>
- Od verze C++26. Poskytuje identifikaci kódování textu.
Řetězce
<charconv>
- Od verze C++17. Poskytuje konverze celých čísel a čísel s pohyblivou řádovou čárkou na řetězce a zpátky nezávislé na národních zvyklostech, neprovádějící alokace, a nevyhazující výjimky.
<format>
- Od verze C++20. Poskytuje moderní způsob formátování řetězců včetně
std::format
. <string>
- Poskytuje třídy a šablony pro práci se znakovými řetězci.
<string_view>
- Od verze C++17. Poskytuje šablonu třídy
std::basic_string_view
, neměnný a nevlastnící pohled na libovolný řetězec. <regex>
- Od verze C++11. Poskytuje programy pro vyhledávání vzorků v řetězci pomocí regulárních výrazů.
Proudy, soubory a vstup/výstup
<filesystem>
- Od verze C++17. Poskytuje nástroje pro operace pro Souborový systém a jeho komponenty.
<fstream>
- Poskytuje nástroje pro vstup ze souboru a výstup do souboru. Viz fstream.
<iomanip>
- Poskytuje nástroje pro nastavení výstupního formátování, např. báze používaný při formátování celého čísla a přesnost hodnot v pohyblivé řádové čárce.
<ios>
- Poskytuje několik typů a funkcí pro základní operace s iostreams.
<iosfwd>
- Poskytuje dopředné deklarace několika šablon tříd pro vstupy a výstupy.
<iostream>
- Poskytuje základní operace pro vstupy a výstupy pro C++. Viz iostream.
<istream>
- Poskytuje
std::istream
a další třídy pro vstup. <ostream>
- Poskytuje
std::ostream
a další třídy pro výstup. <print>
- Od verze C++23. Poskytuje formátovaný výstup, např.
std::print
podporované pro C i C++ proudy. <spanstream>
- Od verze C++23. Poskytuje
std::spanstream
a jiné V/V proudy s pevným znakovým bufferem. <sstream>
- Poskytuje
std::stringstream
a další pomocné třídy pro manipulace s řetězci. <streambuf>
- Poskytuje funkčnost čtení a zapisování na nebo z určitých typů znakových posloupností, např. externích souborů nebo řetězců.
<syncstream>
- Od verze C++20. Poskytuje
std::osyncstream
a další třídy pro podporu synchronizovaných výstupních proudů.
Knihovna podpory vláken
<barrier>
- Od verze C++20. Poskytuje znovupoužitelnou vláknovou bariéru
std::barrier
. <condition_variable>
- Od verze C++11. V 32.6-1, podmínkové proměnné poskytují synchronizační primitiva používaná pro blokování vlákna dokud některé jiné vlákno neinformuje, že byla splněna určitá podmínka nebo dokud nebyl dosažen určitý systémový čas.
<future>
- Od verze C++11. V 32.9.1-1 jsou popisovány komponenty, které může program v C++ používat v jednom vlákně pro načítání výsledků (hodnot nebo výjimek) z funkce, které běžela ve stejném nebo jiném vlákně.
<hazard_pointer>
- Od verze C++26. Poskytuje
std::hazard_pointer
. <latch>
- Od verze C++20. Poskytuje vláknovou bariéru
std::latch
pro jedno použití. <mutex>
- Od verze C++11. V 32.5-1 tato část poskytuje mechanismy pro vzájemné vyloučení: mutexy, zámky, a volání jednou.
<rcu>
- Od verze C++26. Poskytuje mechanismy read-copy-update.
<shared_mutex>
- Od verze C++14. Poskytuje nástroje pro sdílené vzájemné vyloučení.
<semaphore>
- Od verze C++20. Poskytuje semafor, který modeluje nezáporný čítač prostředků.
<stop_token>
- Od verze C++20. V 32.3.1-1, tato část popisuje komponenty, které lze používat pro asynchronní požadavky, které včas zastaví provádění operace, typicky protože výsledek již není požadován. Takový požadavek se nazývá požadavek na zastavení.
<thread>
- Od verze C++11. Poskytuje třídu a jmenný prostor pro práci s vlákny.
Numerická knihovna
Komponenty, které mohou programy v C++ používat pro seminumerické operace.
<bit>
- Od verze C++20. Poskytuje nástroje pro bitové manipulace.
<complex>
- Definuje šablonu třídy
std::complex
a mnoho funkcí pro reprezentaci komplexních čísel a manipulaci s nimi. <numbers>
- Od verze C++20. Poskytuje matematické konstanty definované ve jmenném prostoru
std::numbers
. <random>
- Od verze C++11. Nástroje pro generování (pseudo-)náhodných čísel s různými distribucemi (rozděleními).
<ratio>
- Od verze C++11. Poskytuje v době překladu racionální aritmetiku založenou na šablonách tříd.
<valarray>
- Definuje pět šablon tříd (
std::valarray
,std::slice_array
,std::gslice_array
,std::mask_array
, astd::indirect_array
), dvě třídy (std::slice
astd::gslice
), a řadu šablon funkcí pro reprezentaci a manipulaci s poli hodnot.
Standardní knihovna jazyka C
Podrobnější informace naleznete v článku Standardní knihovna jazyka C.
Každý hlavičkový soubor ze Standardní knihovny jazyka C je obsažen ve Standardní knihovně C++ pod jiným jménem, získaným odstraněním .h
a přidáním c
na začátek jména; například z time.h
se stane ctime
. Jediným rozdílem mezi těmito hlavičkovými soubory a hlavičkovými soubory tradiční Standardní knihovny jazyka C je, že pokud je to možné, jsou funkce umístěny do jmenného prostoru std::
. V ISO C mohou být funkce ve standardní knihovně implementovány makry jazyka C, což v ISO C++ není dovoleno.
Remove ads
Odkazy
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads