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 ).
Boost- bibliotekerne dækker følgende:
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] .
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 .
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] .
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] .
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 ]
Mere Boost Graph Library [11] .
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.