Impulsar | |
---|---|
Tipo de | biblioteca |
Escrito en | C++ |
Sistema operativo | plataforma cruzada |
ultima versión |
|
Estado | activo |
Licencia | Licencia de software de impulso |
Sitio web | impulsar.org |
Archivos multimedia en Wikimedia Commons |
Boost es una colección de bibliotecas de clases que utilizan la funcionalidad del lenguaje C++ y brindan una conveniente interfaz multiplataforma de alto nivel para la codificación concisa de varias subtareas de programación cotidianas (trabajar con datos, algoritmos, archivos, flujos, etc.). Distribuido gratuitamente bajo la licencia de software de Boost [3] junto con el código fuente. El proyecto se creó después de la adopción del estándar C++ , cuando muchos no estaban contentos con la falta de ciertas bibliotecas en STL . El proyecto es una especie de "campo de pruebas" para varias extensiones de lenguaje y parte de las bibliotecas [4] que son candidatas para su inclusión en el próximo estándar de C++ . Boost tiene un fuerte enfoque en la exploración y la extensibilidad ( metaprogramación y plantilla , programación genérica pesada ).
Las bibliotecas de Boost cubren lo siguiente:
Boost incluye la biblioteca de álgebra lineal uBLAS con operaciones vectoriales y matriciales .
Un ejemplo que muestra la multiplicación matriz-vector:
#include <boost/numeric/ublas/vector.hpp> #incluye <boost/numeric/ublas/matrix.hpp> #include <boost/numeric/ublas/io.hpp> utilizando el impulso del espacio de nombres :: numérico :: ublas ; // ejemplo de "y = Ax" int main () { vector < doble > x ( 2 ); X ( 0 ) = 1 ; X ( 1 ) = 2 ; matriz < doble > A ( 2 , 2 ); UN ( 0 , 0 ) = 0 ; UN ( 0 , 1 ) = 1 ; UN ( 1 , 0 ) = 2 ; A ( 1 , 1 ) = 3 ; vector < doble > y = prod ( A , x ); std :: cout << y << std :: endl ; devolver 0 ; }Leer más: Documentación de uBLAS [5] y descripción de operaciones [6] .
Boost proporciona varios generadores de números pseudoaleatorios , a cada uno de los cuales se le puede dar una distribución específica . Un ejemplo que muestra la generación de números aleatorios con una distribución normal :
#incluye <boost/random.hpp> #incluir <chora> usando impulso de espacio de nombres ; doble SampleNormal ( doble media , doble sigma ) { // selecciona el generador de números aleatorios mt19937 rng ; // inicialización del generador con el número de segundos desde 1970 rng . seed ( static_cast < sin firmar > ( std :: time ( 0 ))); // selecciona la distribución deseada normal_distribution < double > norm_dist ( mean , sigma ); // vincular el generador a la distribución variate_generator < mt19937 & , normal_distribution < double > > normal_sampler ( rng , norm_dist ); // ejemplo de trabajo return normal_sampler (); }Consulte Boost Random Number Library [7] para obtener más información .
Spirit es una de las partes más complejas de Boost, diseñada para escribir analizadores ( jar. parsers del parser en inglés ; "parse" - análisis, parsing) directamente en el texto del programa C ++ en una forma cercana a la forma Backus-Naur . Un ejemplo de un analizador para leer números separados por comas:
#incluye <boost/spirit/core.hpp> #incluye <boost/spirit/actor/push_back_actor.hpp> #incluir <iostream> #incluir <vector> #incluir <cadena> utilizando el espacio de nombres estándar ; utilizando espacio de nombres boost :: espíritu ; // Analizador de números separados por comas bool parse_numbers ( const char * str , vector < double >& v ) { volver analizar ( str , // inicio de gramática ( real_p [ empujar_retroceso_a ( v )] >> * ( ',' >> real_p [ empujar_retroceso_a ( v )]) ) , // fin de la gramática space_p ). lleno _ }Leer más Guía del usuario de Spirit [8] .
Boost.Regex es una biblioteca para trabajar con expresiones regulares . Tiene la funcionalidad necesaria para filtrar, buscar, analizar y procesar texto.
Ejemplo de programa para analizar texto:
#incluye <boost/regex.hpp> #incluir <vector> #incluir <cadena> // Ejemplo de analizador de URL int main ( int argc , char ** argv ) { // Comprobar el número de parámetros si ( argc < 2 ) devuelve 0 ; // Contenedor de valores std :: vector < std :: string > valores ; // Expresión para analizar impulso :: expresión regular ( // puerto host proto "^(?:([^:/?#]+)://)?( \\ w+[^/?#:]*)(?::( \\ d+))?" // parámetros del archivo de ruta "(/?(?:[^?#/]*/)*)?([^?#]*)?( \\ ?(.*))?" ); // Formación de la cadena fuente para analizar (tomada de la línea de comando) std :: string src ( argv [ 1 ]); // Analice y complete el contenedor si ( impulso :: regex_split ( std :: back_inserter ( valores ), src , expresión )) { // Muestra el resultado const char * nombres [] = { "Protocolo" , "Host" , "Puerto" , "Ruta" , "Archivo" , "Parámetros" , NULL }; para ( int i = 0 ; nombres [ i ]; i ++ ) printf ( "%s:%s \n " , nombres [ i ], valores [ i ]. c_str ()); } devolver 0 ; }Leer más Boost. Regex [9] .
Boost Graph Library (BGL) proporciona una implementación flexible y eficiente del concepto de gráficos . Puede elegir una representación gráfica (por ejemplo, una lista de adyacencia o una matriz de adyacencia ), un tipo de datos (un tipo GRAPHde LEDA , Graph*de Stanford GraphBase , std::vectorde STL ) y un algoritmo de un gran conjunto de algoritmos, que incluyen: [10 ]
Más Boost Graph Library [11] .
Ejemplo de código que muestra la creación de hilos:
#incluye <boost/thread/thread.hpp> #incluir <iostream> utilizando el espacio de nombres estándar ; vacío hola_mundo () { cout << "Hola mundo, soy hilo!" << endl ; } int principal ( int argc , char * argv []) { // inicia un nuevo hilo que llama a la función "hola_mundo" boost :: hilo mi_hilo ( & hola_mundo ); // esperar a que el hilo termine my_thread . unirse (); devolver 0 ; }Los detalles se pueden encontrar en la documentación [12] y artículos en Dr. Diario de Dobb que describe la biblioteca. [13] [14]
También se conoce el proyecto en C++ de la biblioteca de grupos de subprocesos basada en Boost.Thread, [15] que implementa el patrón de diseño del mismo nombre.