Boost

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită la 30 noiembrie 2019; verificările necesită 2 modificări .
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 ).

Biblioteci

Bibliotecile Boost acoperă următoarele:

Exemple

Algebră liniară

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] .

Generarea numerelor pseudo-aleatoare

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 .

Analiza textului

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] .

Folosind expresii regulate

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] .

Algoritmi pe grafice

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 ]

#include <iostream> #include <listă> #include <algoritm> #include <boost/graph/adjacency_list.hpp> #include <boost/graph/topological_sort.hpp> #include <iterator> #include <utilitate> int main ( int , char * []) { folosind amplificarea spațiului de nume ; // tip de grafic typedef lista_adjacență < vecS , vecS , directionedS , property < vertex_color_t , default_color_type > > Graph ; // vertex descriptor typedef boost :: graph_traits < Graph >:: vertex_descriptor Vertex ; // container pentru un lanț de vârfuri typedef std :: vector < Vertex > container ; // tipul de reprezentare a arcelor de grafic typedef std :: pair < ​​​​std :: size_t , std :: size_t > Pair ; // Muchii grafice Pereche muchii [ 6 ] = { Pereche ( 0 , 1 ), Pereche ( 2 , 4 ), Pereche ( 2 , 5 ) Pereche ( 0 , 3 ), Pereche ( 1 , 4 ), Pereche ( 4 , 3 ) }; // Grafic G ( muchii , muchii + 6 , 6 ); // dicționar pentru obținerea numerelor de vârfuri prin descriptor de vârf boost :: property_map < Graph , vertex_index_t >:: type id = get ( vertex_index , G ); // container pentru depozitarea vârfurilor sortate container c ; // se execută topological_sort ( G , std :: back_inserter ( c )); // Ieșirea rezultatului: enumerarea descriptorilor de grafic în container, // obținerea numerelor ordinale de vârfuri std :: cout << "Verificare topologică: " ; pentru ( container :: reverse_iterator ii = c . rbegin (); ii != c . rend (); ++ ii ) std :: cout << id [ * ii ] << " " ; std :: cout << std :: endl ; returnează 0 ; }

Mai multe Boost Graph Library [11] .

Multithreading

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.

Vezi și

Note

  1. https://www.boost.org/users/history/version_1_80_0.html
  2. Versiunea 1.80.0 - 2022.
  3. Boost Software License . Consultat la 19 februarie 2006. Arhivat din original pe 29 august 2008.
  4. Raport tehnic al bibliotecii . Consultat la 19 februarie 2006. Arhivat din original pe 11 decembrie 2017.
  5. Biblioteca de algebră liniară de bază
  6. Prezentare generală a operațiunilor uBLAS
  7. Boost Random Number Library . Consultat la 19 februarie 2006. Arhivat din original pe 2 decembrie 2008.
  8. Spirit Ghidul utilizatorului . Consultat la 7 august 2011. Arhivat din original pe 7 august 2011.
  9. Boost Regex . Data accesului: 28 ianuarie 2011. Arhivat din original la 25 februarie 2009.
  10. Jeremy Sik și colab., 2006 .
  11. 1 2 Biblioteca Boost Graph (BGL) . Data accesului: 23 iulie 2012. Arhivat din original pe 3 iunie 2012.
  12. Referința API Boost.Threads . Consultat la 15 decembrie 2008. Arhivat din original la 13 octombrie 2008.
  13. Introduction to Boost.Threads Arhivat 5 septembrie 2008 la Wayback Machine din Dr. Jurnalul lui Dobb . (2002)
  14. Ce este nou în Boost Threads? Arhivat pe 21 februarie 2009 la Wayback Machine la Dr. Jurnalul lui Dobb . (2008)
  15. bibliotecă threadpool . Preluat la 5 mai 2022. Arhivat din original la 15 iunie 2020.

Link -uri

Literatură