Lyft

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 30 november 2019; kontroller kräver 2 redigeringar .
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 ).

Bibliotek

Boost - biblioteken täcker följande:

Exempel

Linjär algebra

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

Generering av pseudoslumptal

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 .

Texttolkning

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

Använda reguljära uttryck

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

Algoritmer på grafer

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 ]

#include <iostream> #inkludera <lista> #inkludera <algoritm> #include <boost/graph/adjacency_list.hpp> #include <boost/graph/topological_sort.hpp> #inkludera <iterator> #inkludera <verktyg> int main ( int , char * []) { använder namnutrymmesförstärkning ; _ // graftyp typedef adjacency_list < vecS , vecS , directedS , egenskap < vertex_color_t , default_color_type > > Graph ; // vertex descriptor typedef boost :: graph_traits < Graph >:: vertex_descriptor Vertex ; // behållare för en kedja av hörn typedef std :: vektor < Vertex > behållare ; // representationstyp av graf bågar typedef std :: par < std :: size_t , std :: size_t > Par ; // Graf kanter 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 ); // ordbok för att få vertexnummer genom vertex descriptor boost :: property_map < Graph , vertex_index_t >:: typ id = get ( vertex_index , G ); // behållare för förvaring av sorterade hörn behållare c ; // exekverar topological_sort ( G , std :: back_inserter ( c )); // Utdata av resultatet: uppräkning av grafbeskrivningar i behållaren, // erhållande av ordningstal för hörn std :: cout << "Topologisk kontroll: " ; för ( container :: reverse_iterator ii = c . rbegin (); ii != c . rend (); ++ ii ) std :: cout << id [ * ii ] << " " ; std :: cout << std :: endl ; returnera 0 ; }

Mer Boost Graph Library [11] .

Multithreading

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.

Se även

Anteckningar

  1. https://www.boost.org/users/history/version_1_80_0.html
  2. Release 1.80.0 - 2022.
  3. Boost Software License . Hämtad 19 februari 2006. Arkiverad från originalet 29 augusti 2008.
  4. Teknisk rapport för bibliotek . Hämtad 19 februari 2006. Arkiverad från originalet 11 december 2017.
  5. Grundläggande linjär algebrabibliotek
  6. uBLAS verksamhetsöversikt
  7. Öka slumptalsbiblioteket . Hämtad 19 februari 2006. Arkiverad från originalet 2 december 2008.
  8. Spirit User's Guide . Hämtad 7 augusti 2011. Arkiverad från originalet 7 augusti 2011.
  9. Boost Regex . Datum för åtkomst: 28 januari 2011. Arkiverad från originalet den 25 februari 2009.
  10. Jeremy Sik et al., 2006 .
  11. 1 2 Boost Graph Library (BGL) . Datum för åtkomst: 23 juli 2012. Arkiverad från originalet den 3 juni 2012.
  12. Boost.Threads API-referens . Hämtad 15 december 2008. Arkiverad från originalet 13 oktober 2008.
  13. Introduktion till Boost.Threads Arkiverad 5 september 2008 på Wayback Machine i Dr. Dobbs tidning . (2002)
  14. Vad är nytt i Boost Threads? Arkiverad 21 februari 2009 på Wayback MachineDr. Dobbs tidning . (2008)
  15. threadpool bibliotek . Hämtad 5 maj 2022. Arkiverad från originalet 15 juni 2020.

Länkar

Litteratur