Biblioteca estándar de C++

ImprimirCitar
Colección de clases y funciones utilizadas en el lenguaje de programación C++

En el lenguaje de programación C++, la Biblioteca estándar de C++ es una colección de clases y funciones, que están escritas en el lenguaje principal y forman parte del propio estándar ISO de C++.

Descripción general

La biblioteca estándar de C++ proporciona varios contenedores genéricos, funciones para usar y manipular estos contenedores, objetos de función, cadenas y secuencias genéricas (incluidas E/S interactivas y de archivos), soporte para algunas características del lenguaje y funciones para tareas comunes como encontrar la raíz cuadrada de un número. La biblioteca estándar de C++ también incorpora la mayoría de los encabezados de la biblioteca estándar ISO C que terminan en ".h", pero su uso quedó obsoleto (se revirtió la obsolescencia desde C++ 23). En cambio, C++ 23 considera que estos encabezados son útiles para la interoperabilidad con C y recomienda no su uso fuera de programas que están destinados a ser programas C y C++ válidos. Ningún otro encabezado en la biblioteca estándar de C++ termina en ".h". Las características de la biblioteca estándar de C++ se declaran dentro del espacio de nombres std.

La biblioteca estándar de C++ se basa en convenciones introducidas por la biblioteca de plantillas estándar (STL) y ha sido influenciada por investigaciones en programación genérica y desarrolladores de STL como Alexander Stepanov y Meng Lee. Aunque la biblioteca estándar de C++ y STL comparten muchas características, ninguna es un superconjunto estricto de la otra.

Una característica notable de la biblioteca estándar de C++ es que no solo especifica la sintaxis y la semántica de algoritmos genéricos, sino que también impone requisitos a su rendimiento. Estos requisitos de rendimiento a menudo corresponden a un algoritmo bien conocido, cuyo uso se espera, pero no es obligatorio. En la mayoría de los casos, esto requiere un tiempo lineal O(n) o un tiempo linealítmico O(n log n), pero en algunos casos se permiten límites más altos., como el tiempo cuasilineal O(n log2 n) para la ordenación estable (para permitir la ordenación por fusión in situ). Anteriormente, la clasificación solo era necesaria para tomar O(n log n) en promedio, lo que permitía el uso de clasificación rápida, que es rápida en la práctica pero tiene un rendimiento deficiente en el peor de los casos. pero se introdujo la introclasificación para permitir un rendimiento promedio rápido y una complejidad óptima en el peor de los casos y, a partir de C++ 11, se garantiza que la clasificación será, en el peor de los casos, linealítmica. En otros casos, los requisitos siguen siendo más laxos, como la selección, que solo se requiere que sea lineal en promedio (como en la selección rápida), y no requiere que el peor de los casos sea lineal como en la introselección.

La biblioteca estándar de C++ pasó por la estandarización ISO como parte del esfuerzo de estandarización ISO de C++ en la década de 1990. Desde 2011, se ha ampliado y actualizado cada tres años con cada revisión del estándar C++.

Implementaciones

NombreOrganizaciónPáginaAcrónimosLicenciaÚltima publicación
GNU C++ Biblioteca Estándar GNU Project and Free Software Foundation [1] libstdc++ GPLv3 con GCC Excepciones de biblioteca de tiempo de ejecución Nueva publicación importante una vez al año
LLVM C++ Biblioteca Estándar LLVM Developer Group [2] libc++ Apache License 2.0 con Excepciones LLVM Cada 2 semanas
NVIDIA C++ Biblioteca Estándar Nvidia [3] libcu++ Apache License 2.0 con Excepciones LLVM 12 de octubre, 2022; Hace 10 meses()2022-10-12)
Microsoft Biblioteca Estándar C++ Microsoft [4] MSVC STL Apache License 2.0 con Excepciones LLVM Diario
HPX C++ Biblioteca Estándar para el Paralelismo y la Concurrencia STELLAR Group [5] HPX Boost Software License 1.0 6 de agosto de 2022; Hace 12 meses()2022-08-06)
Biblioteca de la Plantilla de Arte Electrónica Electronic Arts [6] EASTL BSD 3-Clause License 20 de octubre de 2021; Hace 22 meses()2021-10-20)
Dinkum C++ Biblioteca Dinkumware [7] Desconocida Comercial Desconocida
Cray C++ Biblioteca Estándar Cray User Group [8] Desconocida Comercial Desconocida

Descontinuado

Biblioteca estándar Apache C++

La biblioteca estándar Apache C++ es otra implementación de código abierto. Fue desarrollado originalmente comercialmente por Rogue Wave Software y luego donado a la Apache Software Foundation. Sin embargo, después de más de cinco años sin un lanzamiento, la junta directiva de la Apache Software Foundation decidió finalizar este proyecto y trasladarlo a Apache Attic.

Ver también

Las siguientes bibliotecas implementan gran parte de la biblioteca estándar de C++:

NombrePáginaDescripción
Abseil[9]Una colección de bibliotecas de código abierto utilizada internamente por Google
Tonto.[10]Una variedad de bibliotecas C+14 que se utilizan extensamente por Facebook
Biblioteca de Apoyo Bareflank[11]Una biblioteca C++ donde todo se puede ejecutar a tiempo de compilación

Módulos estándar

Desde que se introdujeron los módulos en C++20, no ha habido soporte para módulos de biblioteca estándar hasta C++23. Estos módulos con nombre se agregaron para incluir todos los elementos declarados en los espacios de nombres globales y std proporcionados por los encabezados estándar importables. No se permite que las macros sean exportables, por lo que los usuarios deben incluir o importar manualmente encabezados que emitan macros para su uso.

std
Exporta todas las declaraciones en el espacio de nombres std y funciones globales de asignación de almacenamiento y distribución que son proporcionadas por los encabezados importables de la biblioteca C++ incluyendo las instalaciones de la biblioteca C (aunque declarados en el espacio de nombres estándar).
std.compat
Exporta las mismas declaraciones que el módulo nombrado std, y además las funciones de exportación en el espacio mundial de nombres en las instalaciones de la biblioteca C.

Encabezados estándar

Los siguientes archivos contienen las declaraciones de la biblioteca estándar de C++.

Generalidades

Nuevo en C+17. Provee una clase de tipo borrado std::any.
Nuevo en C++11. Proporciona plantilla de clase std::atomic, sus varias especializaciones de plantilla, y operaciones más atómicas.
Proporciona elementos de tiempo, como std::chrono::duration, std::chrono::time_pointY relojes. Desde C++20 se añadieron una cantidad elevada de características temporales: calendarios, zonas horarias, más relojes y formato de crono de cadena.
Nuevo en C++20. Proporciona conceptos básicos de biblioteca.
Nuevo en C++23. Proporciona plantilla de clase std::expected, un tipo de resultado.
Proporciona varios objetos de función, diseñados para su uso con los algoritmos estándar.
Nuevo en C++23. Proporciona un generador de coroutina que además soporta las operaciones de rendimiento anidado en los rangos.
Proporciona instalaciones para la gestión de memoria en C++, incluyendo la plantilla de clase std::unique_ptr.
Nuevo en C+17. Proporciona instalaciones para crear aleatores de memoria polimorfos cuyos comportamientos pueden cambiar a tiempo de ejecución.
Nuevo en C+17. Proporciona plantilla de clase std::optional, un tipo opcional.
Nuevo en C++11. Proveedores std::scoped_allocator_adaptor.
Nuevo en C++23. Proporciona operaciones de rastreo de pila.
Contiene clases de excepción estándar como std::logic_error y std::runtime_error, ambos derivados de std::exception.
Nuevo en C++11. Defines std::error_code
Nuevo en C++11 y TR1. Proporciona una plantilla de clase std::tupleUn tuple.
Nuevo en C++11. Proporciona instalaciones de metaprogramación trabajando con tipos.
Proporciona diversas utilidades: plantilla de clase std::pair (Tuplas de dos miembros), secuencias de enteros de compilacion, ayudantes en la construcción de tipos de vocabulario, funciones tales como std::move y std::forward, y muchos más. El espacio de nombres std::rel_ops para generar operadores de comparación automáticamente se deprecata en C++20 a favor de nuevos operadores de comparación predeterminados.
Nuevo en C+17. Proporciona una plantilla de clase std::variantUn tipo de unión etiquetado.

Soporte de idiomas

Nuevo en C++20. Proporciona soporte de operador de comparación de tres vías.
Nuevo en C++20. Proporciona soporte coroutino.
Proporciona varios tipos y funciones relacionadas con el manejo de excepciones, incluyendo std::exception, la clase base de todas las excepciones lanzadas por la Biblioteca Estándar.
Nuevo en C++11. Proporciona soporte de lista inicializador.
Proporciona la plantilla de clase std::numeric_limits, utilizado para describir propiedades de los tipos numéricos fundamentales.
Proporciona operadores new y delete y otras funciones y tipos que componen los fundamentos de la gestión de memoria C++.
Nuevo en C++20. Proporciona capturar información de ubicación de la fuente como alternativa a macros predefinidas, como __LINE__.
Nuevo en C++23. Proporciona soporte condicional para tipos de puntos flotantes prolongados.
Ofrece instalaciones para trabajar con información de tipo C++.
Nuevo en C++20. Proporciona información sobre la implementación de la biblioteca estándar C++.

Contenedores

Nuevo en C++11 y TR1. Proporciona la plantilla de clase contenedor std::array, un contenedor para un array de tamaño fijo.
Proporciona la clase de contenedores especializados std::bitset, un pequeño arreglo.
Proporciona la plantilla de clase contenedor std::dequeUna cola doble.
Nuevo en C++23. Proporciona las plantillas de clase de adaptador de contenedores std::flat_map y std::flat_multimap.
Nuevo en C++23. Proporciona las plantillas de clase de adaptador de contenedores std::flat_set y std::flat_multiset.
Nuevo en C++11 y TR1. Proporciona la plantilla de clase contenedor std::forward_listUna lista enlazada.
Proporciona la plantilla de clase contenedor std::listUna lista doblemente vinculada.
Proporciona las plantillas de clase de contenedores std::map y std::multimap, array asociativo clasificado y multimap.
Nuevo en C++23. Proporciona la plantilla de clase std::mdspan, análogo a std::span pero la vista es multidimensional.
Proporciona la clase de adaptador de contenedores std::queue, una cola única, y std::priority_queueUna cola prioritaria.
Proporciona las plantillas de clase de contenedores std::set y std::multiset, contenedores asociativos ordenados o conjuntos.
Nuevo en C++20. Proporciona la plantilla de clase std::span, una visión no poseedora que se refiere a cualquier rango contiguo.
Proporciona la clase de adaptador de contenedores std::stackUna pila.
Nuevo en C++11 y TR1. Proporciona la plantilla de clase contenedor std::unordered_map y std::unordered_multimap, tablas de hachís.
Nuevo en C++11 y TR1. Proporciona la plantilla de clase contenedor std::unordered_set y std::unordered_multiset.
Proporciona la plantilla de clase contenedor std::vector, una matriz dinámica.

Iteradores y rangos

Proporciona definiciones de muchos algoritmos para su uso con contenedores y otros rangos.
Nuevo en C+17. Proporciona políticas de ejecución para algoritmos paralelos.
Proporciona clases y plantillas para trabajar con iterators.
algoritmos numéricos generalizados.
Nuevo en C++20. Proporciona instalaciones de gamas y adaptadores de evaluación lazily.

Localización

Proporciona facetas de conversión de código para varias codificaciones de caracteres. Este encabezado está deprecado desde C+17.
Define clases y declara funciones que encapsulan y manipulan la información peculiar a un local.
Nuevo en C++26. Proporciona identificaciones de codificación de texto.

Cuerdas

Nuevo en C+17. Proporciona una utilidad de conversión de cadenas locales-independientes, no localizables y no de navegación de / a enteros y punto flotante.
Nuevo en C++20. Proporciona una forma moderna de formatear cadenas incluyendo std::format.
Proporciona las clases estándar de cadena C++ y plantillas.
Nuevo en C+17. Proporciona plantilla de clase std::basic_string_view, una vista inmutable sin poseer a cualquier cuerda.
Nuevo en C++11. Proporciona utilidades para cadenas de juego de patrones utilizando expresiones regulares.

Transmisiones, archivos y entrada/salida

Nuevo en C+17. Proporciona instalaciones para las operaciones del sistema de archivos y sus componentes.
Proporciona instalaciones para insumos y salida basados en archivos. Ver fstream.
Proporciona instalaciones para manipular el formato de salida, como la base utilizada al formatear los enteros y la precisión de los valores de punto flotante.
Proporciona varios tipos y funciones básicas para el funcionamiento de iostreams.
Proporciona declaraciones de varias plantillas de clase relacionadas con I/O.
Proporciona elementos de entrada y salida C++. Ver iostream.
Proveedores std::istream y otras clases de apoyo para la entrada.
Proveedores std::ostream y otras clases de apoyo para la producción.
Nuevo en C++23. Proporciona utilidades de salida formateadas, como std::print soportado para secuencias C y C++.
Nuevo en C++23. Proveedores std::spanstream y otros flujos de caracteres fijos I/O.
Proveedores std::stringstream y otras clases de apoyo para la manipulación de cuerdas.
Proporciona funcionalidad de lectura y escritura a ciertos tipos de secuencias de caracteres, como archivos externos o cadenas.
Nuevo en C++20. Proveedores std::osyncstream y otras clases de apoyo para secuencias de salida sincronizadas.

Biblioteca de soporte de subprocesos

Nuevo en C++20. Proveedores std::barrierUna barrera de rosca reutilizable.
Nuevo en C++11. En 32.6-1, las variables de condición proporcionan primitivos de sincronización utilizados para bloquear un hilo hasta que se notifica por algún otro hilo que se cumple alguna condición o hasta que se alcanza un tiempo del sistema.
Nuevo en C++11. En 32.9.1-1, esta sección describe componentes que un programa C+ puede utilizar para recuperar en un hilo el resultado (valor o excepción) de una función que ha funcionado en el mismo hilo u otro hilo.
Nuevo en C++26. Proporciona pt::hazard_pointer.
Nuevo en C++20. Proveedores std::latchUna barrera de rosca de un solo uso.
Nuevo en C++11. En 32.5-1, esta sección proporciona mecanismos de exclusión mutua: mutexes, cerraduras y llamada una vez.
Nuevo en C++26. Proporciona mecanismos actualizados.
Nuevo en C++14. Proporciona facitilidad para la exclusión mutua compartida.
Nuevo en C++20. Proporciona semaforo que los modelos no negativo cuentan recursos.
Nuevo en C++20. En 32.3.1-1, esta sección describe componentes que pueden utilizarse para pedir asincrónicamente que una operación deje de ejecutarse de manera oportuna, típicamente porque el resultado ya no es necesario. Tal solicitud se llama solicitud de parada.
Nuevo en C++11. Proporcionar clase y espacio de nombres para trabajar con hilos.

Biblioteca numérica

Componentes que los programas C++ pueden utilizar para realizar operaciones seminuméricas.

Nuevo en C++20. Proporciona facilidad de manipulación de bits.
Define una plantilla de clase std::complex, y numerosas funciones para representar y manipular números complejos.
Nuevo en C++20. Proporciona constantes matemáticas definidas en el espacio de nombres std::numbers.
Nuevo en C++11. Facilidad para generar (pseudo-) números y distribuciones.
Nuevo en C++11. Proporciona aritmética racional de tiempo de compilación basada en plantillas de clase.
Define cinco plantillas de clase (std::valarray, std::slice_array, std::gslice_array, std::mask_array, y std::indirect_array), dos clases (std::slice y std::gslice), y una serie de plantillas de función relacionadas para representar y manipular arrays de valores.

Biblioteca estándar C

Cada encabezado de la biblioteca estándar de C se incluye en la biblioteca estándar de C++ con un nombre diferente, que se genera eliminando el archivo.h y agregando un encabezado 'c' al principio; por ejemplo, 'tiempo.h' se convierte en 'ctime'. La única diferencia entre estos encabezados y los encabezados tradicionales de la biblioteca estándar de C es que, siempre que sea posible, las funciones deben colocarse en el espacio de nombres std::. En ISO C, las funciones de la biblioteca estándar pueden implementarse mediante macros, lo que no está permitido en ISO C++.

Ver también

  • Boost (C++ bibliotecas)
  • Biblioteca C POSIX
  • C biblioteca estándar
  • Biblioteca estándar
  • C++ Informe técnico 1

Contenido relacionado

Ejecución especulativa

La ejecución especulativa es una técnica de optimización en la que un sistema informático realiza alguna tarea que puede no ser necesaria. El trabajo se...

Interfaz de nivel de llamada

La interfaz de nivel de llamada es una interfaz de programación de aplicaciones y un estándar de software para incrustar código de lenguaje de consulta...

Comedor problema de los filósofos

En informática, el problema de los filósofos comedores es un problema de ejemplo que se utiliza a menudo en el diseño de algoritmos concurrentes para...
Más resultados...
Tamaño del texto: