Lyft | |
---|---|
Sorts | bibliotek |
Skrivet i | C++ |
Operativ system | Cross plattform |
senaste versionen |
|
stat | aktiva |
Licens | Boost Software License |
Hemsida | boost.org |
Mediafiler på Wikimedia Commons |
Boost är en samling klassbibliotek som använder funktionaliteten i C++-språket och tillhandahåller ett bekvämt gränssnitt på hög nivå på flera plattformar för kortfattad kodning av olika vardagliga programmeringsunderuppgifter (att arbeta med data, algoritmer, filer, strömmar, etc.). Fritt distribuerad under Boost Software License [3] tillsammans med källkoden. Projektet skapades efter antagandet av C++-standarden , när många var missnöjda med bristen på vissa bibliotek i STL . Projektet är en slags "testplats" för olika språktillägg och en del av de bibliotek [4] som är kandidater för inkludering i nästa C++-standard .Boost har ett starkt fokus på utforskning och utökbarhet ( metaprogrammering och mall -tung generisk programmering ).
Boost - biblioteken täcker följande:
Boost inkluderar uBLAS linjära algebrabibliotek med vektor- och matrisoperationer .
Ett exempel som visar matris-vektor multiplikation:
#include <boost/numeric/ublas/vector.hpp> #include <boost/numeric/ublas/matrix.hpp> #include <boost/numeric/ublas/io.hpp> använder namnområdesförstärkning :: numerisk :: ublas ; _ // "y = Axe" exempel int main () { vektor < dubbel > x ( 2 ); x ( 0 ) = 1 ; x ( 1 ) = 2 ; matris < dubbel > A ( 2 , 2 ); A ( 0 , 0 ) = 0 ; A ( 0 , 1 ) = 1 ; A ( 1 , 0 ) = 2 ; A ( 1 , 1 ) = 3 ; vektor < dubbel > y = prod ( A , x ); std :: cout << y << std :: endl ; returnera 0 ; }Läs mer: uBLAS dokumentation [5] och beskrivning av verksamheten [6] .
Boost tillhandahåller olika pseudo-slumptalsgeneratorer , som var och en kan ges en specifik fördelning . Ett exempel som visar genereringen av slumptal med normalfördelning :
#include <boost/random.hpp> #inkludera <ctime> använder namnutrymmesförstärkning ; _ dubbel SampleNormal ( dubbel medelvärde , dubbel sigma ) { // välj slumptalsgenerator mt19937 rng ; // initiering av generatorn med antalet sekunder sedan 1970 rng . frö ( static_cast < unsigned > ( std :: tid ( 0 ))); // välj den önskade fördelningen normal_distribution < double > norm_dist ( medelvärde , sigma ); // bind generator till distribution variate_generator < mt19937 & , normal_distribution < double > > normal_sampler ( rng , norm_dist ); // arbetsexempel return normal_sampler (); }Se Boost Random Number Library [7] för detaljer .
Spirit är en av de mest komplexa delarna av Boost, designad för att skriva parsers ( jar. parsers från den engelska parser ; "parse" - analys, parsing) direkt i C++- programtexten i en form nära Backus-Naur-formen . Ett exempel på en parser för att läsa kommaseparerade tal:
#include <boost/spirit/core.hpp> #include <boost/spirit/actor/push_back_actor.hpp> #include <iostream> #inkludera <vektor> #inkludera <sträng> använder namnutrymme std ; använder namnområdesförstärkning :: spirit ; _ // Parser för kommaseparerade tal bool parse_numbers ( const char * str , vektor < double >& v ) { returnera parse ( str , // grammatikstart ( real_p [ push_back_a ( v )] >> * ( ',' >> real_p [ push_back_a ( v )]) ) , // slutet av grammatik space_p ). full ; }Läs mer Spirit User's Guide [8] .
Boost.Regex är ett bibliotek för att arbeta med reguljära uttryck . Den har den nödvändiga funktionaliteten för att filtrera, söka, analysera och bearbeta text.
Stöder PCRE , POSIX BRE och ERE
Exempelprogram för att tolka text:
#include <boost/regex.hpp> #inkludera <vektor> #inkludera <sträng> // Exempel URL parser int main ( int argc , char ** argv ) { // Kontrollera antalet parametrar om ( argc < 2 ) returnerar 0 ; // Behållare för värden std :: vektor < std :: sträng > värden ; // Uttryck för att analysera boost :: regex uttryck ( // proto värdport "^(?:([^:/?#]+)://)?( \\ w+[^/?#:]*)(?::( \\ d+))?" // sökvägsfilens parametrar "(/?(?:[^?#/]*/)*)?([^?#]*)?( \\ ?(.*))?" ); // Bildning av källsträngen för analys (tagen från kommandoraden) std :: string src ( argv [ 1 ]); // Analysera och fyll i behållaren if ( boost :: regex_split ( std :: back_inserter ( värden ), src , expression )) { // Mata ut resultatet const char * names [] = { "Protokoll" , "Värd" , "Port" , "Sökväg" , "Fil" , "Parametrar" , NULL }; för ( int i = 0 ; namn [ i ]; i ++ ) printf ( "%s:%s \n " , namn [ i ], värden [ i ]. c_str ()); } returnera 0 ; }Läs mer Boost.Regex [9] .
Boost Graph Library (BGL) ger en flexibel och effektiv implementering av konceptet grafer . Du kan välja en grafrepresentation (till exempel en närliggande lista eller en närliggande matris ), en datatyp (en typ GRAPHfrån LEDA , Graph*från Stanford GraphBase , std::vectorfrån STL ) och en algoritm från en stor uppsättning algoritmer, inklusive: [10 ]
Mer Boost Graph Library [11] .
Kodexempel som visar skapandet av trådar:
#include <boost/thread/thread.hpp> #include <iostream> använder namnutrymme std ; void hello_world () { cout << "Hej värld, jag är tråd!" << endl ; } int main ( int argc , char * argv []) { // starta en ny tråd som kallar "hello_world"-funktionen boost :: thread my_thread ( & hello_world ); // vänta på att tråden ska avsluta my_thread . gå med (); returnera 0 ; }Detaljer finns i dokumentationen [12] och artiklar i Dr. Dobb's Journal som beskriver biblioteket. [13] [14]
Även känt är C++-projektet för trådpoolsbiblioteket baserat på Boost.Thread, [15] som implementerar designmönstret med samma namn.