Boost

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 30. november 2019; checks kræver 2 redigeringer .
Boost
Type bibliotek
Skrevet i C++
Operativ system Cross platform
nyeste version
Stat aktiv
Licens Boost-softwarelicens
Internet side boost.org
 Mediefiler på Wikimedia Commons

Boost  er en samling af klassebiblioteker, der bruger funktionaliteten i C++-sproget og giver en praktisk grænseflade på tværs af platforme på højt niveau til kortfattet kodning af forskellige daglige programmeringsunderopgaver (arbejde med data, algoritmer, filer, streams osv.). Frit distribueret under Boost-softwarelicensen [3] sammen med kildekoden. Projektet blev oprettet efter vedtagelsen af ​​C++-standarden , hvor mange var utilfredse med manglen på visse biblioteker i STL . Projektet er en slags "testplads" for forskellige sprogudvidelser og en del af de biblioteker [4] , der er kandidater til optagelse i den næste C++ standard . Boost har et stærkt fokus på udforskning og udvidelsesmuligheder ( metaprogrammering og skabelon -tung generisk programmering ).

Biblioteker

Boost- bibliotekerne dækker følgende:

Eksempler

Lineær algebra

Boost inkluderer det lineære algebrabibliotek uBLAS med vektor- og matrixoperationer .

Et eksempel, der viser matrix-vektor multiplikation:

#include <boost/numeric/ublas/vector.hpp> #include <boost/numeric/ublas/matrix.hpp> #include <boost/numeric/ublas/io.hpp> brug af navneområdeboost :: numerisk :: ublas ; // "y = Axe" eksempel int main () { vektor < dobbelt > x ( 2 ); x ( 0 ) = 1 ; x ( 1 ) = 2 ; matrix < dobbelt > A ( 2 , 2 ); A ( 0 , 0 ) = 0 ; A ( 0 , 1 ) = 1 ; A ( 1 , 0 ) = 2 ; A ( 1 , 1 ) = 3 ; vektor < dobbelt > y = prod ( A , x ); std :: cout << y << std :: endl ; returnere 0 ; }

Læs mere: uBLAS dokumentation [5] og beskrivelse af operationer [6] .

Generering af pseudo-tilfældige tal

Boost leverer forskellige pseudo-tilfældige talgeneratorer , som hver især kan gives en specifik fordeling . Et eksempel, der viser generering af tilfældige tal med en normalfordeling :

#include <boost/random.hpp> #include <ctime> brug af navneområde boost ; dobbelt SampleNormal ( dobbelt gennemsnit , dobbelt sigma ) { // vælg tilfældig talgenerator mt19937 rng ; // initialisering af generatoren med antallet af sekunder siden 1970 rng . frø ( static_cast < unsigned > ( std :: tid ( 0 ))); // vælg den ønskede fordeling normal_distribution < double > norm_dist ( mean , sigma ); // bind generator til distribution variate_generator < mt19937 & , normal_distribution < double > > normal_sampler ( rng , norm_dist ); // arbejdseksempel returner normal_sampler (); }

Se Boost Random Number Library [7] for detaljer .

Tekstfortolkning

Spirit er en af ​​de mest komplekse dele af Boost, designet til at skrive parsere ( jar. parsere fra den engelske  parser ; "parse" - analyse, parsing) direkte i C++ programteksten i en form tæt på Backus-Naur formen . Et eksempel på en parser til læsning af kommaseparerede tal:

#include <boost/spirit/core.hpp> #include <boost/spirit/actor/push_back_actor.hpp> #include <iostream> #inkluder <vektor> #inkluder <streng> bruger navneområde std ; ved hjælp af navneområdeboost :: spirit ; // Parser for kommaseparerede tal bool parse_numre ( const char * str , vektor < double >& v ) { returner parse ( str , // grammatik start ( real_p [ push_back_a ( v )] >> * ( ',' >> real_p [ push_back_a ( v )]) ) , // slutningen af ​​grammatik space_p ). fuld ; }

Læs mere Spirit User's Guide [8] .

Brug af regulære udtryk

Boost.Regex er et bibliotek til at arbejde med regulære udtryk . Den har den nødvendige funktionalitet til filtrering, søgning, parsing og behandling af tekst.

Understøtter PCRE , POSIX BRE og ERE

Eksempelprogram til at analysere tekst:

#include <boost/regex.hpp> #inkluder <vektor> #inkluder <streng> // Eksempel URL - parser int main ( int argc , char ** argv ) { // Tjek for antallet af parametre hvis ( argc < 2 ) returnerer 0 ; // Container for værdier std :: vektor < std :: streng > værdier ; // Udtryk for at parse boost :: regex udtryk ( // proto vært port "^(?:([^:/?#]+)://)?( \\ w+[^/?#:]*)(?::( \\ d+))?" // stifilparametre "(/?(?:[^?#/]*/)*)?([^?#]*)?( \\ ?(.*))?" ); // Dannelse af kildestrengen til parsing (taget fra kommandolinjen) std :: string src ( argv [ 1 ]); // Parse og udfyld beholderen if ( boost :: regex_split ( std :: back_inserter ( værdier ), src , udtryk )) { // Udskriv resultatet const char * names [] = { "Protokol" , "Vært" , "Port" , "Sti" , "Fil" , "Parameters" , NULL }; for ( int i = 0 ; navne [ i ]; i ++ ) printf ( "%s:%s \n " , navne [ i ], værdier [ i ]. c_str ()); } returnere 0 ; }

Læs mere Boost.Regex [9] .

Algoritmer på grafer

Boost Graph Library (BGL) giver en fleksibel og effektiv implementering af konceptet grafer . Du kan vælge en grafrepræsentation (for eksempel en tilgrænsende liste eller en tilstødende matrix ), en datatype (en type GRAPHfra LEDA , Graph*fra Stanford GraphBase , std::vectorfra STL ) og en algoritme fra et stort sæt algoritmer, herunder: [10 ]

#include <iostream> #inkluder <liste> #include <algoritme> #include <boost/graph/adjacency_list.hpp> #include <boost/graph/topological_sort.hpp> #inkluder <iterator> #inkluder <hjælpeprogram> int main ( int , char * []) { brug af navneområde boost ; // graftype typedef adjacency_list < vecS , vecS , directedS , property < vertex_color_t , default_color_type > > Graph ; // vertex descriptor typedef boost :: graph_traits < Graph >:: vertex_descriptor Vertex ; // container for en kæde af hjørner typedef std :: vektor < Vertex > container ; // repræsentationstype af graf buer typedef std :: par < ​std :: størrelse_t , std :: størrelse_t > Par ; // Grafkanter Par kanter [ 6 ] = { Par ( 0 , 1 ), Par ( 2 , 4 ), Par ( 2 , 5 ) Par ( 0 , 3 ), Par ( 1 , 4 ), Par ( 4 , 3 ) }; // Graf G ( kanter , kanter + 6 , 6 ); // ordbog til at få toppunktnumre ved toppunktsdeskriptorboost :: property_map < Graph , vertex_index_t >:: type id = get ( vertex_index , G ) ; // beholder til opbevaring af sorterede hjørner beholder c ; // udfører topological_sort ( G , std :: back_inserter ( c )); // Output af resultatet: opregning af grafbeskrivelser i beholderen, // opnåelse af ordinære numre af knudepunkter std :: cout << "Topologisk kontrol: " ; for ( container :: reverse_iterator ii = c . rbegin (); ii != c . rend (); ++ ii ) std :: cout << id [ * ii ] << " " ; std :: cout << std :: endl ; returnere 0 ; }

Mere Boost Graph Library [11] .

Multithreading

Kodeeksempel, der viser oprettelsen af ​​tråde:

#include <boost/thread/thread.hpp> #include <iostream> bruger navneområde std ; void hello_world () { cout << "Hej verden, jeg er tråd!" << endl ; } int main ( int argc , char * argv []) { // start en ny tråd, der kalder "hello_world"-funktionen boost :: thread my_thread ( & hello_world ); // vent på, at tråden afslutter min_tråd . deltage (); returnere 0 ; }

Detaljer kan findes i dokumentationen [12] og artikler i Dr. Dobb's Journal , der beskriver biblioteket. [13] [14]

Også kendt er C++-projektet i trådpuljebiblioteket baseret på Boost.Thread, [15] , der implementerer designmønsteret af samme navn.

Se også

Noter

  1. https://www.boost.org/users/history/version_1_80_0.html
  2. Udgivelse 1.80.0 - 2022.
  3. Boost-softwarelicens . Hentet 19. februar 2006. Arkiveret fra originalen 29. august 2008.
  4. Bibliotekets tekniske rapport . Hentet 19. februar 2006. Arkiveret fra originalen 11. december 2017.
  5. Grundlæggende lineær algebrabibliotek
  6. uBLAS driftsoversigt
  7. Forøg tilfældigt talbibliotek . Hentet 19. februar 2006. Arkiveret fra originalen 2. december 2008.
  8. Spirit Brugervejledning . Hentet 7. august 2011. Arkiveret fra originalen 7. august 2011.
  9. Boost Regex . Dato for adgang: 28. januar 2011. Arkiveret fra originalen 25. februar 2009.
  10. Jeremy Sik et al., 2006 .
  11. 1 2 Boost Graph Library (BGL) . Dato for adgang: 23. juli 2012. Arkiveret fra originalen 3. juni 2012.
  12. Boost.Threads API-reference . Hentet 15. december 2008. Arkiveret fra originalen 13. oktober 2008.
  13. Introduktion til Boost.Threads Arkiveret 5. september 2008 på Wayback Machine i Dr. Dobbs Journal . (2002)
  14. Hvad er nyt i Boost Threads? Arkiveret 21. februar 2009 på Wayback Machine hos Dr. Dobbs Journal . (2008)
  15. threadpool bibliotek . Hentet 5. maj 2022. Arkiveret fra originalen 15. juni 2020.

Links

Litteratur