Librería Estándar
nestor25423 de Marzo de 2015
3.745 Palabras (15 Páginas)282 Visitas
5 Librería Estándar
§1 Sinopsis
C++ no llega al nivel de simplicidad de su antecesor C, pero al igual que aquél, tampoco dispone de utilidades o funciones para entrada o salida implementadas en el propio lenguaje, de modo que estas y otras muchas, como manejo de cadenas de caracteres (strings), manejo de ficheros, funciones matemáticas Etc. son implementadas en forma de librerías externas.
Una librería es un conjunto de recursos (algoritmos) prefabricados, que pueden ser utilizados por el programador para realizar determinadas operaciones ( 1.4.4a). Las declaraciones de las funciones (prototipos 4.4.1) utilizadas en estas librerías, junto con algunas macros y constantes predefinidas que facilitan su utilización, se agrupan en ficheros de nombres conocidos que suelen encontrarse en sitios predefinidos. Por ejemplo, en los sistemas UNIX, en /usr/include. Estos ficheros se suelen llamar "de cabecera", porque es tradición utilizar las primeras líneas del programa para poner las directivas #include ( 4.9.10g) que los incluirá en el fuente durante la fase de preprocesado ( 1.4).
§2 Clases de librerías
Los compiladores C++ incluyen un amplio repertorio de clases, funciones y macros que permiten realizar una amplia variedad de tareas, incluyendo entradas/salidas de bajo y alto nivel; manipulación de cadenas alfanuméricas y ficheros; control de procesos (incluyendo multiproceso); manejo de memoria; cálculos matemáticos y un largo etcétera.
Este repertorio de recursos es denominado colectivamente como "Rutinas de librería"; "Librerías de ejecución" RTL ("Runtime Librarys") o simplemente "Librerías". Puede decirse que el lenguaje aislado (tal cual) no tiene prácticamente ninguna utilidad sin la concurrencia de estas utilidades. El Estándar C++ las clasifica según su utilidad:
Soporte del lenguaje [7]
Diagnóstico
Utilidades generales
Cadenas alfanuméricas ("Strings")
Localización
Contenedores
Iteradores
Algoritmos
Cálculo numérico
Entrada/Salida
§2.1 Librería Estándar C++
Para poner un poco de orden, el Estándar C++ define la denominada Librería Estándar [3] que debe acompañar a cada implementación del compilador que se adhiera al estándar. Es decir: la norma determina cuales son, como se llaman y como se utiliza este conjunto de algoritmos que deben acompañar (como mínimo) a cada implementación del compilador que quiera llamarse "Estándar". La última versión, ISO/IEC 14882 del año 1998, especifica que se compone de 32 ficheros de cabecera de nombres fijos y conocidos agrupados según la funcionalidad de los algoritmos. Son los siguientes:
Ficheros Funcionalidad/funciones
<algorithm> Parte de la STL que describe los algoritmos ( 5.1.3)
<bitset> Parte de la STL relativa a contenedores tipo bitset ( 5.1.1e1). Set de valores booleanos.
<complex> Parte de la librería numérica de la STL relativa a los complejos ( ).
<deque> Parte de la STL relativa a contenedores tipo deque; un tipo de colas: "Double-ended-queue" ( 5.1.1c3).
<exception> Parte de la librería de diagnóstico relativa al manejo de excepciones ( 1.6)
<fstream> Flujos hacia/desde ficheros.
<functional> Parte de la STL relativa a Objetos-función ( 4.9.18f)
<iomanip> Manipuladores.
<ios> Supreclases para manejo de flujos de E/S.
<iosfwd> Contiene declaraciones adelantadas de todas las plantillas de flujos y sus typedefs estándar. Por ejemplo ostream.
<iostream> Parte del a STL que contiene los algoritmos estándar de E/S.
<istream> Algoritmos estándar de flujos de entrada.
<iterator> Parte de la STL relacionada con iteradores ( 5.1.2), un tipo de puntero que permite utilizar los algoritmos de la Librería con las estructuras de datos representadas por los contenedores.
<limits> Descripción de propiedades dependientes de la implementación ( 1.2.1) que afectan a los tipos fundamentales.
<list> Parte de la STL relativa a contenedores tipo list ( 5.1.1c4); listas doblemente enlazadas ( 1.8)
<locale> Parte de la STL relativa a la internacionalización ( 5.2).
<map> Parte de la STL relativa a contenedores tipo map ( 5.1.1e4).
<memory> Utilidades relativas a la gestión de memoria, incluyendo asignadores ( 5.1.5) y punteros inteligentes (auto_ptr).
<new> Manejo de memoria dinámica ( 1.3.2)
<numeric> Parte de la librería numérica de la STL relativa a operaciones numéricas ( ).
<ostream> Algoritmos estándar para los flujos de salida.
<queue> Parte de la STL relativa a contenedores tipo queue ( 5.1.1d1); colas de objetos ( 1.8).
<set> Parte de la STL relativa a contenedores tipo set ( 5.1.1e2).
<sstream> Flujos hacia/desde cadenas alfanuméricas.
<stack> Parte de la STL relativa a contenedores tipo stack ( 5.1.1c5); pilas de objetos ( 1.8).
<stdexcept> Parte de la STL relativa a las clases de las que derivan los objetos lanzados por las excepciones ocasionadas en los algoritmos de la propia STL y otras expresiones. Estas clases son utilizadas para reportar errores detectados durante runtime. Los usuarios también pueden utilizar excepciones para reportar errores en sus propios programas ( 1.6.1a).
<streambuf> Parte de la STL relativa al Almacenamiento de flujos de E/S ("Stream buffers"). Define los tipos que controlan la capa de transporte ( 5.3.2f).
<string> Parte de la STL relativa a contenedores tipo string ( ); una generalización de las cadenas alfanuméricas para albergar cadenas de objetos.
<typeinfo> Mecanismo de identificación de tipos en tiempo de ejecución ( 4.9.14).
<utility> Parte de la STL que contiene elementos auxiliares como operadores y pares (pairs).
<valarray> Parte de la librería numérica de la STL relativa a manejo de matrices numéricas ()
<vector> Parte de la STL relativa a los contenedores tipo vector; una generalización de las matrices unidimensionales C/C++ ( 5.1.1c1)
Es digno de mención que aunque generalmente las librerías no aportan ninguna característica al lenguaje (se supone que son utilidades auxiliares que no forman parte del lenguaje propiamente dicho), una pequeña porción de la Librería Estándar C++ sí aporta características que se consideran pertenecientes a este, de forma que deben estar presentes los ficheros de cabecera correspondientes si se desea usarlas. En concreto se refieren a los siguientes elementos:
Operadores new, new[], delete y delete[] ( 4.9.20).
Clase type_info que corresponde al mecanismo RTTI de identificación de tipos en tiempo de ejecución representado por el operador typeid ( 4.9.14).
Rutinas de inicio y terminación ( 1.5).
Las excepciones estándar lanzadas por los algoritmos anteriores ( 1.6.1a)
§2.2 Librería C
Además de otras nuevas, cuyo diseño e importancia cambian drásticamente la filosofía del lenguaje, C++ incluye prácticamente la totalidad de funciones de la primitiva librería estándar C. A esta librería, mantenida por compatibilidad, la denominamos Librería clásica ( 5.5).
§2.3 Otras librerías
Además de las que proporciona el Estándar y las complementarias que pueda incluir por su cuenta el fabricante del compilador, en los proyectos reales se suelen utilizar infinidad de otras librerías, comerciales o públicas, que facilitan el trabajo en áreas particulares, y en este sentido, recordar que uno de los pecados que el programador novel debe evitar, es la tendencia a querer reinventar constantemente la rueda. De forma que el consejo es utilizar en lo posible librerías que estén probadas y sean fácilmente accesibles. Aunque hay que tener cuidado, porque determinados proyectos exigen que las librerías utilizadas estén perfectamente documentadas y en ciertos casos, que se cuente con los fuentes correspondientes.
Aunque el mundo del software se mueve muy rápidamente y cualquier indicación al respecto puede quedar rápidamente anticuada, en la página Librerías C/C++ de este manual puede encontrar una selección de ellas. Aquí nos limitaremos a hacer especial mención a las Librerías Boost, por su condición de libres y su alta calidad técnica. Algunas de ellas han sido adoptadas por la última versión del Estándar (C++11) [8].
§3 Componentes
Al referirnos a las librerías C++ utilizamos la terminología siguiente:
RTL Conjunto de librerías que acompañan a un compilador ("Runtime Library"), sean o no estándar.
Librería Estándar. Conjunto de librerías cuyo contenido está definido por el Estándar C++ (abreviadamente LE)
Libería clásica. Parte de la Librería Estándar correspondiente al C clásico.
STL ("Standard Templete Library"). Parte de la LE genuina de C++ (que no es heredada de C) y que responde a la forma "++" de hacer las cosas.
La calidad de un compilador C++ viene determinada en gran medida por la calidad y cantidad de su RTL; por su grado de adherencia al Estándar
...