# Biblioteca estàndard de C++

En el llenguatge de programació C++, la biblioteca estàndard de C++ és una col·lecció de classes i funcions, que s'escriuen en el llenguatge bàsic i formen part del propi estàndard ISO de C++.

## Visió general

La biblioteca estàndard de C++ proporciona diversos contenidors genèrics, funcions per utilitzar i manipular aquests contenidors, objectes de funció, cadenes i fluxos genèrics (incloses les E/S interactives i de fitxers), suport per a algunes característiques del llenguatge i funcions per a tasques habituals com ara trobar l'arrel quadrada d'un nombre. La biblioteca estàndard de C++ també incorpora la majoria de capçaleres de la biblioteca estàndard ISO C que acaben amb ".h", però el seu ús va quedar obsolet (es va revertir la desaparició des de C++23). En canvi, C++23 considera que aquestes capçaleres són útils per a la interoperabilitat amb C, i recomana que no es facin servir fora de programes que estan destinats a ser programes C i C++ vàlids. No hi ha cap altra capçalera de la biblioteca estàndard de C++ que acabi en ".h". Les característiques de la biblioteca estàndard de C++ es declaren dins de l'espai de noms std.
La biblioteca estàndard de C++ es basa en les convencions introduïdes per la biblioteca de plantilles estàndard (STL) i ha estat influenciada per la investigació en programació genèrica i desenvolupadors de STL com Alexander Stepanov i Meng Lee. Tot i que la biblioteca estàndard de C++ i l'STL comparteixen moltes característiques, cap dels dos és un superconjunt estricte de l'altre.
Una característica destacable de la biblioteca estàndard de C++ és que no només especifica la sintaxi i la semàntica dels algorismes genèrics, sinó que també estableix requisits sobre el seu rendiment. Aquests requisits de rendiment sovint corresponen a un algorisme conegut, que s'espera però no s'ha d'utilitzar. En la majoria dels casos, això requereix un temps lineal O( n ) o un temps linearitmic O( n log n ), però en alguns casos es permeten límits més alts, com ara el temps quasilineal O( n log $^2$ n ) per a una ordenació estable (per permetre una ordenació in situ). combinar ordenació). Anteriorment, l'ordenació només era necessària per prendre O( n log n ) de mitjana, permetent l'ús de quicksort, que és ràpid a la pràctica però té un rendiment pobre en el pitjor dels casos, però es va introduir introsort per permetre un rendiment mitjà ràpid i òptim. complexitat del cas, i a partir de C++11, es garanteix que l'ordenació serà linearitmica en el pitjor. En altres casos, els requisits segueixen sent més laxs, com la selecció, que només cal que sigui lineal de mitjana (com en la selecció ràpida), no requereix el pitjor dels casos lineals com en la introselecta.
La biblioteca estàndard de C++ es va sotmetre a l'estandardització ISO com a part de l'esforç d'estandardització ISO de C++ a la dècada de 1990. Des del 2011, s'ha ampliat i actualitzat cada tres anys amb cada revisió de l'estàndard C++.

## Mòduls estàndard

Des que els mòduls es van introduir en C++20, no hi ha hagut suport per als mòduls de biblioteca estàndard fins a C++23. Aquests mòduls amb nom es van afegir per incloure tots els elements declarats als espais de noms globals i std proporcionats per les capçaleres estàndard importables. Les macros no es poden exportar, de manera que els usuaris han d'incloure o importar manualment capçaleres que emeten macros per utilitzar-les.

## Capçaleres estàndard

Els fitxers contenen les declaracions de la biblioteca estàndard de C++.

## Referències

* ↑ Thomas Köppe. «Clarifying the status of the "C headers"» (en anglès), 11-06-2021.
* ↑ Bjarne Stroustrup. The Design and Evolution of C++ §8.5 (en anglès). Addison Wesley, 1994. ISBN 0-201-54330-3.
* ↑ Alexander Stepanov, Meng Lee. «The Standard Template Library» (en anglès). HP Labs, 01-08-1994. Arxivat de l'original el 8 de maig 2018. [Consulta: 22 octubre 2017].
* ↑ «std::nth_element» (en anglès). cppreference.com. [Consulta: 20 març 2018].
* ↑ «C++ Standard Library - cppreference.com» (en anglès). [Consulta: 11 desembre 2023].