Standardní knihovna C ++ - C++ Standard Library
Standardní knihovna C ++ |
---|
Kontejnery |
C standardní knihovna |
V C ++ programovací jazyk, Standardní knihovna C ++ je sbírka třídy a funkce, které jsou napsány v základní jazyk a část C ++ ISO Samotný standard.[1]
Přehled
Standardní knihovna C ++ poskytuje několik obecných kontejnerů, funkce pro použití a manipulaci s těmito kontejnery, funkční objekty, obecné řetězce a proudy (včetně interaktivních a vstupních / výstupních souborů), podpora některých jazykových funkcí a funkce pro každodenní úkoly, jako je hledání odmocnina čísla. Standardní knihovna C ++ také obsahuje většinu záhlaví ISO C standardní knihovna končící na „.h“, ale jejich použití je zastaralé.[2] Žádné jiné záhlaví ve standardní knihovně C ++ nekončí na „.h“. Funkce standardní knihovny C ++ jsou deklarovány v rámci std
jmenný prostor.
Standardní knihovna C ++ je založena na konvencích zavedených Standardní knihovna šablon (STL) a byl ovlivněn výzkumem v generické programování a vývojáři STK jako např Alexander Stepanov a Meng Lee.[3][4] Ačkoli standardní knihovna C ++ a STL sdílejí mnoho funkcí, ani jedna není striktní nadmnožinou druhé.[Citace je zapotřebí ]
Pozoruhodnou vlastností standardní knihovny C ++ je, že nejen specifikuje syntaxi a sémantiku obecných algoritmů, ale také klade požadavky na jejich výkon.[5] Tyto výkonnostní požadavky často odpovídají známému algoritmu, jehož použití se očekává, ale nevyžaduje se. Ve většině případů to vyžaduje lineární čas O (n) nebo lineární čas Ó(n log n), ale v některých případech jsou povoleny vyšší hranice, například kvazilineární čas Ó(n log2 n) pro stabilní řazení (povolit třídění sloučení na místě ). Dříve bylo třídění vyžadováno pouze pro převzetí O (n log n) v průměru umožňuje použití quicksort, který je v praxi rychlý, ale má špatný výkon v nejhorším případě, ale introsort byl zaveden tak, aby umožňoval jak rychlý průměrný výkon, tak optimální složitost v nejhorším případě, a od C ++ 11, je zaručeno, že třídění bude v nejhorším případě lineární. V ostatních případech zůstávají požadavky laxnější, jako např výběr, který musí být průměrný pouze lineární (jako v rychlý výběr ),[6] nevyžadující nejhorší případ lineární jako v introselect.
Standardní knihovna C ++ prošla normalizací ISO jako součást úsilí o normalizaci C ++ ISO a prochází dalšími pracemi[7] týkající se standardizace rozšířené funkčnosti.
Implementace
Standardní knihovna Microsoft C ++ (STL)
Na CppCon 2019 16. září 2019, Microsoft oznámili vydání své implementace standardní knihovny C ++ (také známé jako STL) jako otevřený zdroj.[8] Je hostován na GitHub a licencován pod Licence Apache 2.0 s LLVM Výjimka.[9][10]
Standardní knihovna Apache C ++
The Standardní knihovna Apache C ++ je další implementace open source. Původně byl komerčně vyvinut společností Rogue Wave Software a později daroval Softwarová nadace Apache.[11] Po více než pěti letech bez vydání se však představenstvo Apache Software Foundation rozhodlo ukončit tento projekt a přesunout ho na Apache Attic.[12]
Standardní záhlaví
Následující soubory obsahují deklarace standardní knihovny C ++.
Kontejnery
- <array>
- Nový V C ++ 11 a TR1. Poskytuje šablonu třídy kontejneru
std :: pole
, kontejner pro pole pevné velikosti. - <bitset>
- Poskytuje specializovanou třídu kontejnerů
std :: bitset
, a bitové pole. - <deque>
- Poskytuje šablonu třídy kontejneru
std :: deque
, a oboustranná fronta. - <forward_list>
- Nový V C ++ 11 a TR1. Poskytuje šablonu třídy kontejneru
std :: forward_list
, a jednotlivě propojený seznam. - <list>
- Poskytuje šablonu třídy kontejneru
std :: seznam
, a dvojnásobně propojený seznam. - <map>
- Poskytuje šablony třídy kontejneru
std :: mapa
astd :: multimap
, seřazeno asociativní pole a multimapa. - <queue>
- Poskytuje třídu adaptéru kontejneru
std :: fronta
, s jedním koncem fronta, astd :: priority_queue
, a prioritní fronta. - <set>
- Poskytuje šablony třídy kontejneru
std :: set
astd :: multiset
, tříděné asociativní kontejnery nebo sady. - <stack>
- Poskytuje třídu adaptéru kontejneru
std :: stack
, a zásobník. - <unordered_map>
- Nový V C ++ 11 a TR1. Poskytuje šablonu třídy kontejneru
std :: unordered_map
astd :: unordered_multimap
, hash tabulky. - <unordered_set>
- Nový V C ++ 11 a TR1. Poskytuje šablonu třídy kontejneru
std :: unordered_set
astd :: unordered_multiset
. - <vector>
- Poskytuje šablonu třídy kontejneru
std :: vektor
, a dynamické pole.
Všeobecné
- <algorithm>
- Poskytuje definice mnoha kontejnerů algoritmy.
- <chrono>
- Poskytuje časové prvky, například
std :: chrono :: doba trvání
,std :: chrono :: time_point
a hodiny.
- <functional>
- Poskytuje několik funkční objekty, navržený pro použití se standardními algoritmy.
- <iterator>
- Poskytuje třídy a šablony pro práci s iterátory.
- <memory>
- Poskytuje zázemí pro správa paměti v C ++, včetně šablony třídy
std :: unique_ptr
. - <stdexcept>
- Obsahuje standardní třídy výjimek, jako je
std :: logic_error
astd :: runtime_error
, oba odvozeny zstd :: výjimka
. - <tuple>
- Nový V C ++ 11 a TR1. Poskytuje šablonu třídy
std :: n-tice
, a n-tice. - <utility>
- Poskytuje třídu šablony
std :: pair
, pro práci s dvojicemi objektů (dvoučlenné n-tice ) a jmenný prostorstd :: rel_ops
, pro snazší přetížení obsluhy.
Lokalizace
- <locale>
- Definuje třídy a deklaruje funkce, které zapouzdřují a manipulují s vlastními informacemi národní prostředí.
- <codecvt>
- Poskytuje fazety pro převod kódu pro různá kódování znaků.
Struny
- <string>
- Poskytuje standard C ++ tětiva třídy a šablony.
- <regex>
- Nový V C ++ 11. Poskytuje nástroje pro použití řetězců odpovídajících vzorům regulární výrazy.
Proudy a vstup / výstup
- <fstream>
- Poskytuje možnosti pro souborový vstup a výstup. Vidět fstream.
- <iomanip>
- Poskytuje zařízení pro manipulaci s formátováním výstupu, například základna používá se při formátování celých čísel a přesnost z plovoucí bod hodnoty.
- <ios>
- Poskytuje několik typů a funkcí základních pro provoz iostreamů.
- <iosfwd>
- Poskytuje předat prohlášení několika šablon tříd souvisejících s I / O.
- <iostream>
- Poskytuje C ++ vstupní a výstupní základy. Vidět proud.
- <istream>
- Poskytuje třídu šablony
std :: istream
a další podpůrné třídy pro vstup. - <ostream>
- Poskytuje třídu šablony
std :: ostream
a další podpůrné třídy pro výstup. - <sstream>
- Poskytuje třídu šablony
std :: stringstream
a další podpůrné třídy pro manipulaci s řetězci. - <streambuf>
- Poskytuje funkce čtení a zápisu do / z určitých typů posloupností znaků, jako jsou externí soubory nebo řetězce.
Jazyková podpora
- <exception>
- Poskytuje několik typů a funkcí souvisejících s zpracování výjimek, počítaje v to
std :: výjimka
, základní třída všech výjimek vyvolaných standardní knihovnou. - <limits>
- Poskytuje třídu šablony
std :: numeric_limits
, který se používá k popisu vlastností základních numerických typů. - <new>
- Poskytuje operátory
Nový
avymazat
a další funkce a typy tvořící základy C ++ správa paměti. - <typeinfo>
- Poskytuje vybavení pro práci s C ++ informace o typu běhu.
Knihovna podpory vláken
- <thread>
- Nový V C ++ 11. Poskytněte třídu a jmenný prostor pro práci s vlákny.
- <mutex>
- Nový V C ++ 11. 30.4-1. Tato část poskytuje mechanismy pro vzájemné vyloučení: mutexy, zámky a jednorázové volání.
- <condition_variable>
- Nový V C ++ 11. 30,5-1. Proměnné podmínky poskytují synchronizační primitivy používané k blokování vlákna, dokud není oznámeno jiným vláknem, že je splněna nějaká podmínka, nebo dokud není dosažen systémový čas.
- <future>
- Nový V C ++ 11. 30.6.1-1. Popisuje komponenty, které program C ++ může použít k načtení výsledku (hodnoty nebo výjimky) v jednom vlákně z funkce, která byla spuštěna ve stejném vlákně nebo jiném vlákně.
Numerická knihovna
Komponenty, které programy C ++ mohou používat k provádění seminárních operací.
- <complex>
- Záhlaví
definuje šablonu třídy a řadu funkcí pro reprezentaci a manipulaci se složitými čísly. - <random>
- Zařízení pro generování (pseudo) náhodných čísel
- <valarray>
- Definuje pět šablon tříd (valarray, slice_array, gslice_array, mask_array a nepřímý_array), dvě třídy (slice a gslice) a řadu souvisejících šablon funkcí pro reprezentaci a manipulaci s poli hodnot.
- <numeric>
- Zobecněné numerické operace.
C standardní knihovna
Každá hlavička ze standardní knihovny C je zahrnuta ve standardní knihovně C ++ pod jiným názvem, generovaná odstraněním souboru .h a přidáním písmene „c“ na začátku; například „time.h“ se změní na „ctime“. Jediný rozdíl mezi těmito hlavičkami a tradičními hlavičkami standardní knihovny C je ten, že pokud je to možné, měly by být funkce umístěny do std :: namespace. V ISO C je povoleno implementovat funkce ve standardní knihovně makra, což ISO C ++ nepovoluje.
Viz také
- Standardní knihovna Apache C ++
- Boost (knihovny C ++)
- C POSIX knihovna
- C standardní knihovna
- Standardní knihovna
- C ++ technická zpráva 1
Reference
- ^ ISO / IEC 14882: 2003 (E) Programovací jazyky - C ++ §17-27
- ^ ISO / IEC 14882: 2003 (E) Programovací jazyky - C ++ §D.5
- ^ Bjarne Stroustrup. Návrh a vývoj C ++ §8.5. Addison Wesley. ISBN 0-201-54330-3.
- ^ Alexander Stepanov, Meng Lee (1. srpna 1994). "Standardní knihovna šablon". Laboratoře HP. Citováno 22. října 2017.
- ^ "Obecné algoritmy ", David Musser
- ^ "std :: nth_element". cppreference.com. Citováno 20. března 2018.
- ^ „JTC1 / SC22 / WG21 - Výbor pro standardy C ++“. ISO / IEC. Citováno 7. července 2009.
- ^ https://devblogs.microsoft.com/cppblog/open-sourcing-msvcs-stl/
- ^ https://github.com/microsoft/STL
- ^ https://github.com/microsoft/STL/blob/master/LICENSE.txt
- ^ Standardní knihovna Apache C ++
- ^ Brett Porter (18. července 2013). „Standardní knihovna Apache C ++ a podkroví“. seznam adresátů stdcxx-dev. Citováno 27. února 2014.
Další čtení
- Stroustrup, Bjarne. Programovací jazyk C ++. Addison-Wesley. ISBN 978-0321563842.
- Josuttis, Nicolai. Standardní knihovna C ++ - výuka a reference. Addison-Wesley. ISBN 978-0-321-62321-8.
- Van Weert, Peter; Gregoire, Marc. Rychlý průvodce standardní knihovnou C ++. Apress. ISBN 978-1484218754.
externí odkazy
- Referenční příručka standardní knihovny C ++
- Referenční příručka standardní knihovny Microsoft C ++
- Dokumentace Rogue Wave SourcePro C ++
- Apache C ++ Standard Library Wiki, do důchodu 15. května 2014 (na základě standardní knihovny Rogue Wave C ++ 4.1.0)
- Dokumentace standardní knihovny STLport C ++
- Online dokumentace knihovny GNU C ++
- Dokumentace ke standardní knihovně LLVM / Clang C ++