Posílit | |
---|---|
Typ | knihovna |
Zapsáno v | C++ |
Operační systém | Křížová platforma |
Nejnovější verze | |
Stát | aktivní |
Licence | Rozšířená softwarová licence |
webová stránka | boost.org |
Mediální soubory na Wikimedia Commons |
Boost je kolekce knihoven tříd, které využívají funkčnost jazyka C++ a poskytují pohodlné multiplatformní rozhraní na vysoké úrovni pro stručné kódování různých každodenních programovacích dílčích úloh (práce s daty, algoritmy, soubory, proudy atd.). Volně šířeno pod licencí Boost Software License [3] spolu se zdrojovým kódem. Projekt vznikl po přijetí standardu C++ , kdy mnozí byli nespokojeni s nedostatkem určitých knihoven v STL . Projekt je jakýmsi „zkušebním terénem“ pro různá jazyková rozšíření a část knihoven [4] , které jsou kandidáty na zařazení do dalšího standardu C++ . Boost se silně zaměřuje na průzkum a rozšiřitelnost ( metaprogramování a generické programování náročné na šablony ).
Knihovny Boost pokrývají následující:
Boost obsahuje knihovnu lineární algebry uBLAS s vektorovými a maticovými operacemi .
Příklad ukazující násobení maticového vektoru:
#include <boost/numeric/ublas/vector.hpp> #include <boost/numeric/ublas/matrix.hpp> #include <boost/numeric/ublas/io.hpp> using namespace boost :: numeric :: ublas ; // příklad "y = Axe" int main () { vektor < double > x ( 2 ); x ( 0 ) = 1 ; x ( 1 ) = 2 ; matice < double > A ( 2 , 2 ); A ( 0,0 ) = 0 ; _ _ A ( 0,1 ) = 1 ; _ _ A ( 1,0 ) = 2 ; _ _ A ( 1,1 ) = 3 ; _ _ vektor < double > y = prod ( A , x ); std :: cout << y << std :: endl ; návrat 0 ; }Přečtěte si více: dokumentace uBLAS [5] a popis operací [6] .
Boost poskytuje různé generátory pseudonáhodných čísel , z nichž každý může mít specifickou distribuci . Příklad ukazující generování náhodných čísel s normálním rozdělením :
#include <boost/random.hpp> #include <ctime> pomocí posílení jmenného prostoru ; double SampleNormal ( double mean , double sigma ) { // výběr generátoru náhodných čísel mt19937 rng ; // inicializace generátoru s počtem sekund od roku 1970 rng . seed ( static_cast < unsigned > ( std :: čas ( 0 ))); // vyberte požadovanou distribuci normal_distribution < double > norm_dist ( mean , sigma ); // naváže generátor na distribuci variate_generator < mt19937 & , normal_distribution < double > > normal_sampler ( rng , norm_dist ); // funkční příklad return normal_sampler (); }Podrobnosti viz Knihovna náhodných čísel Boost [7] .
Spirit je jedna z nejsložitějších částí Boostu, určená k zápisu parserů ( jar. parsers z anglického parser ; "parse" - analýza, parsování) přímo do textu programu C++ ve formě blízké formě Backus-Naur . Příklad analyzátoru pro čtení čísel oddělených čárkami:
#include <boost/spirit/core.hpp> #include <boost/spirit/actor/push_back_actor.hpp> #include <iostream> #include <vektor> #include <řetězec> pomocí jmenného prostoru std ; pomocí jmenného prostoru boost :: duch ; // Analyzátor pro čísla oddělená čárkami bool parse_numbers ( const char * str , vector < double >& v ) { return parse ( str , // začátek gramatiky ( real_p [ push_back_a ( v )] >> * ( ',' >> real_p [ push_back_a ( v )]) ) , // konec gramatiky mezera_p ). plný ; }Přečtěte si více Spirit User's Guide [8] .
Boost.Regex je knihovna pro práci s regulárními výrazy . Má potřebnou funkcionalitu pro filtrování, vyhledávání, analýzu a zpracování textu.
Podporuje PCRE , POSIX BRE a ERE
Ukázkový program pro analýzu textu:
#include <boost/regex.hpp> #include <vektor> #include <řetězec> // Ukázkový analyzátor adresy URL int main ( int argc , char ** argv ) { // Kontrola počtu parametrů if ( argc < 2 ) return 0 ; // Kontejner pro hodnoty std :: vector < std :: řetězec > hodnoty ; // Výraz pro analýzu zesílení :: výraz regulárního výrazu ( // proto hostitelský port "^(?:([^:/?#]+)://)?( \\ w+[^/?#:]*)(?::( \\ d+))?" // parametry souboru cesty "(/?(?:[^?#/]*/)*)?([^?#]*)?( \\ ?(.*))?" ); // Vytvoření zdrojového řetězce pro analýzu (převzato z příkazového řádku) std :: string src ( argv [ 1 ]); // Analyzujte a naplňte kontejner if ( boost :: regex_split ( std :: back_inserter ( values ), src , expression )) { // Výstup výsledku const char * names [] = { "Protokol" , "Hostitel" , "Port" , "Cesta" , "Soubor" , "Parametry" , NULL }; for ( int i = 0 ; jména [ i ]; i ++ ) printf ( "%s:%s \n " , jména [ i ], hodnoty [ i ]. c_str ()); } návrat 0 ; }Přečtěte si více Boost.Regex [9] .
Boost Graph Library (BGL) poskytuje flexibilní a efektivní implementaci konceptu grafů . Můžete si vybrat grafovou reprezentaci (například seznam sousedství nebo matici sousedství ), datový typ (typ GRAPHod LEDA , Graph*od Stanford GraphBase , std::vectorod STL ) a algoritmus z velké sady algoritmů, včetně: [10 ]
Více Knihovna grafů Boost [11] .
Příklad kódu znázorňující vytváření vláken:
#include <boost/thread/thread.hpp> #include <iostream> pomocí jmenného prostoru std ; void hello_world () { cout << "Ahoj světe, já jsem vlákno!" << endl ; } int main ( int argc , char * argv []) { // spustí nové vlákno, které volá funkci "hello_world" boost :: thread my_thread ( & hello_world ); // počkejte, až vlákno dokončí my_thread . připojit se (); návrat 0 ; }Podrobnosti lze nalézt v dokumentaci [12] a článcích v Dr. Dobb's Journal popisující knihovnu. [13] [14]
Známý je také projekt C++ knihovny fondu vláken založený na Boost.Thread, [15] , který implementuje stejnojmenný návrhový vzor..