Boost | |
---|---|
Tip de | bibliotecă |
Scris in | C++ |
Sistem de operare | Platformă transversală |
ultima versiune | |
Stat | activ |
Licență | Boost Software License |
Site-ul web | boost.org |
Fișiere media la Wikimedia Commons |
Boost este o colecție de biblioteci de clasă care utilizează funcționalitatea limbajului C++ și oferă o interfață convenabilă de nivel înalt multiplatformă pentru codificarea concisă a diferitelor subsarcini de programare de zi cu zi (lucrarea cu date, algoritmi, fișiere, fluxuri etc.). Distribuit gratuit sub Licența Software Boost [3] împreună cu codul sursă. Proiectul a fost creat după adoptarea standardului C++ , când mulți erau nemulțumiți de lipsa anumitor biblioteci în STL . Proiectul este un fel de „teren de testare” pentru diverse extensii de limbaj și parte din bibliotecile [4] care sunt candidate pentru includerea în următorul standard C++ . Boost are un accent puternic pe explorare și extensibilitate ( metaprogramare și programare generică cu șabloane ).
Bibliotecile Boost acoperă următoarele:
Boost include biblioteca de algebră liniară uBLAS cu operații vectoriale și matrice .
Un exemplu care arată multiplicarea matrice-vector:
#include <boost/numeric/ublas/vector.hpp> #include <boost/numeric/ublas/matrix.hpp> #include <boost/numeric/ublas/io.hpp> folosind namespace boost :: numeric :: ublas ; // exemplu "y = Ax" int main () { vector < dublu > x ( 2 ); x ( 0 ) = 1 ; x ( 1 ) = 2 ; matricea < dublu > A ( 2 , 2 ); A ( 0 , 0 ) = 0 ; A ( 0 , 1 ) = 1 ; A ( 1 , 0 ) = 2 ; A ( 1 , 1 ) = 3 ; vector < dublu > y = prod ( A , x ); std :: cout << y << std :: endl ; returnează 0 ; }Citește mai mult: documentația uBLAS [5] și descrierea operațiunilor [6] .
Boost oferă diverși generatori de numere pseudo-aleatoare , fiecăruia cărora li se poate da o distribuție specifică . Un exemplu care arată generarea de numere aleatoare cu o distribuție normală :
#include <boost/random.hpp> #include <ctime> folosind amplificarea spațiului de nume ; double SampleNormal ( dublă medie , dublu sigma ) { // selectează generatorul de numere aleatorii mt19937 rng ; // inițializarea generatorului cu numărul de secunde din 1970 rng . seed ( static_cast < unsigned > ( std :: time ( 0 ))); // selectează distribuția dorită normal_distribution < double > norm_dist ( medie , sigma ); // leagă generatorul de distribuție variate_generator < mt19937 & , normal_distribution < double > > normal_sampler ( rng , norm_dist ); // exemplu de lucru return normal_sampler (); }Consultați Boost Random Number Library [7] pentru detalii .
Spirit este una dintre cele mai complexe părți ale Boost, concepută pentru a scrie parsere ( jar. parsers din engleza parser ; „parse” - analiză, analiză) direct în textul programului C ++ într-o formă apropiată de forma Backus-Naur . Un exemplu de parser pentru citirea numerelor separate prin virgulă:
#include <boost/spirit/core.hpp> #include <boost/spirit/actor/push_back_actor.hpp> #include <iostream> #include <vector> #include <șir> folosind namespace std ; folosind namespace boost :: spirit ; // Parser pentru numere separate prin virgulă bool parse_numbers ( const char * str , vector < double >& v ) { returnează analiza ( str , // începe gramatica ( real_p [ push_back_a ( v )] >> * ( ',' >> real_p [ push_back_a ( v )]) ) , // sfârșitul gramaticii space_p ). plin ; }Citiți mai multe Ghidul utilizatorului Spirit [8] .
Boost.Regex este o bibliotecă pentru lucrul cu expresii regulate . Are funcționalitatea necesară pentru filtrarea, căutarea, analizarea și procesarea textului.
Suportă PCRE , POSIX BRE și ERE
Exemplu de program pentru analizarea textului:
#include <boost/regex.hpp> #include <vector> #include <șir> // Exemplu de analizor URL int main ( int argc , char ** argv ) { // Verificați numărul de parametri dacă ( argc < 2 ) returnează 0 ; // Container pentru valori std :: vector < std :: șir > valori ; // Expresie pentru a analiza boost :: expresie regex ( // portul gazdă proto "^(?:([^:/?#]+)://)?( \\ w+[^/?#:]*)(?::( \\ d+))?" // parametrii fișierului cale „(/?(?:[^?#/]*/)*)?([^?#]*)?( \\ ?(.*))?" ); // Formarea șirului sursă pentru parsare (preluat din linia de comandă) std :: string src ( argv [ 1 ]); // Analizați și populați containerul dacă ( boost :: regex_split ( std :: back_inserter ( valori ), src , expresie )) { // Afișează rezultatul const char * names [] = { "Protocol" , "Gazdă" , "Port" , "Cale" , "Fișier" , "Parametri" , NULL }; pentru ( int i = 0 ; nume [ i ]; i ++ ) printf ( "%s:%s \n " , nume [ i ], valori [ i ]. c_str ()); } returnează 0 ; }Citește mai mult Boost.Regex [9] .
Boost Graph Library (BGL) oferă o implementare flexibilă și eficientă a conceptului de grafice . Puteți alege o reprezentare grafică (de exemplu, o listă de adiacență sau o matrice de adiacență ), un tip de date (un tip GRAPHde la LEDA , Graph*de la Stanford GraphBase , std::vectorde la STL ) și un algoritm dintr-un set mare de algoritmi, inclusiv: [10 ]
Mai multe Boost Graph Library [11] .
Exemplu de cod care arată crearea de fire:
#include <boost/thread/thread.hpp> #include <iostream> folosind namespace std ; void hello_world () { cout << "Bună lume, eu sunt fir!" << endl ; } int main ( int argc , char * argv []) { // începe un nou thread care apelează funcția "hello_world" boost :: thread my_thread ( & hello_world ); // așteptați ca firul să se termine my_thread . alăturați-vă (); returnează 0 ; }Detalii pot fi găsite în documentația [12] și articolele din Dr. Jurnalul lui Dobb care descrie biblioteca. [13] [14]
De asemenea, este cunoscut proiectul C++ al bibliotecii pool de fire bazat pe Boost.Thread, [15] care implementează modelul de design cu același nume.