Posílit

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 30. listopadu 2019; kontroly vyžadují 2 úpravy .
Posílit
Typ knihovna
Zapsáno v C++
Operační systém Křížová platforma
Nejnovější verze
Stát aktivní
Licence Rozšířená softwarová licence
webová stránka boost.org
 Mediální soubory na Wikimedia Commons

Boost  je kolekce knihoven tříd, které využívají funkčnost jazyka C++ a poskytují pohodlné multiplatformní rozhraní na vysoké úrovni pro stručné kódování různých každodenních programovacích dílčích úloh (práce s daty, algoritmy, soubory, proudy atd.). Volně šířeno pod licencí Boost Software License [3] spolu se zdrojovým kódem. Projekt vznikl po přijetí standardu C++ , kdy mnozí byli nespokojeni s nedostatkem určitých knihoven v STL . Projekt je jakýmsi „zkušebním terénem“ pro různá jazyková rozšíření a část knihoven [4] , které jsou kandidáty na zařazení do dalšího standardu C++ . Boost se silně zaměřuje na průzkum a rozšiřitelnost ( metaprogramování a generické programování náročné na šablony ).

Knihovny

Knihovny Boost pokrývají následující:

Příklady

Lineární algebra

Boost obsahuje knihovnu lineární algebry uBLAS s vektorovými a maticovými operacemi .

Příklad ukazující násobení maticového vektoru:

#include <boost/numeric/ublas/vector.hpp> #include <boost/numeric/ublas/matrix.hpp> #include <boost/numeric/ublas/io.hpp> using namespace boost :: numeric :: ublas ; // příklad "y = Axe" int main () { vektor < double > x ( 2 ); x ( 0 ) = 1 ; x ( 1 ) = 2 ; matice < double > A ( 2 , 2 ); A ( 0,0 ) = 0 ; _ _ A ( 0,1 ) = 1 ; _ _ A ( 1,0 ) = 2 ; _ _ A ( 1,1 ) = 3 ; _ _ vektor < double > y = prod ( A , x ); std :: cout << y << std :: endl ; návrat 0 ; }

Přečtěte si více: dokumentace uBLAS [5] a popis operací [6] .

Generování pseudonáhodných čísel

Boost poskytuje různé generátory pseudonáhodných čísel , z nichž každý může mít specifickou distribuci . Příklad ukazující generování náhodných čísel s normálním rozdělením :

#include <boost/random.hpp> #include <ctime> pomocí posílení jmenného prostoru ; double SampleNormal ( double mean , double sigma ) { // výběr generátoru náhodných čísel mt19937 rng ; // inicializace generátoru s počtem sekund od roku 1970 rng . seed ( static_cast < unsigned > ( std :: čas ( 0 ))); // vyberte požadovanou distribuci normal_distribution < double > norm_dist ( mean , sigma ); // naváže generátor na distribuci variate_generator < mt19937 & , normal_distribution < double > > normal_sampler ( rng , norm_dist ); // funkční příklad return normal_sampler (); }

Podrobnosti viz Knihovna náhodných čísel Boost [7] .

Analýza textu

Spirit je jedna z nejsložitějších částí Boostu, určená k zápisu parserů ( jar. parsers z anglického  parser ; "parse" - analýza, parsování) přímo do textu programu C++ ve formě blízké formě Backus-Naur . Příklad analyzátoru pro čtení čísel oddělených čárkami:

#include <boost/spirit/core.hpp> #include <boost/spirit/actor/push_back_actor.hpp> #include <iostream> #include <vektor> #include <řetězec> pomocí jmenného prostoru std ; pomocí jmenného prostoru boost :: duch ; // Analyzátor pro čísla oddělená čárkami bool parse_numbers ( const char * str , vector < double >& v ) { return parse ( str , // začátek gramatiky ( real_p [ push_back_a ( v )] >> * ( ',' >> real_p [ push_back_a ( v )]) ) , // konec gramatiky mezera_p ). plný ; }

Přečtěte si více Spirit User's Guide [8] .

Použití regulárních výrazů

Boost.Regex je knihovna pro práci s regulárními výrazy . Má potřebnou funkcionalitu pro filtrování, vyhledávání, analýzu a zpracování textu.

Podporuje PCRE , POSIX BRE a ERE

Ukázkový program pro analýzu textu:

#include <boost/regex.hpp> #include <vektor> #include <řetězec> // Ukázkový analyzátor adresy URL int main ( int argc , char ** argv ) { // Kontrola počtu parametrů if ( argc < 2 ) return 0 ; // Kontejner pro hodnoty std :: vector < std :: řetězec > hodnoty ; // Výraz pro analýzu zesílení :: výraz regulárního výrazu ( // proto hostitelský port "^(?:([^:/?#]+)://)?( \\ w+[^/?#:]*)(?::( \\ d+))?" // parametry souboru cesty "(/?(?:[^?#/]*/)*)?([^?#]*)?( \\ ?(.*))?" ); // Vytvoření zdrojového řetězce pro analýzu (převzato z příkazového řádku) std :: string src ( argv [ 1 ]); // Analyzujte a naplňte kontejner if ( boost :: regex_split ( std :: back_inserter ( values ​​​​), src , expression )) { // Výstup výsledku const char * names [] = { "Protokol" , "Hostitel" , "Port" , "Cesta" , "Soubor" , "Parametry" , NULL }; for ( int i = 0 ; jména [ i ]; i ++ ) printf ( "%s:%s \n " , jména [ i ], hodnoty ​​[ i ]. c_str ()); } návrat 0 ; }

Přečtěte si více Boost.Regex [9] .

Algoritmy na grafech

Boost Graph Library (BGL) poskytuje flexibilní a efektivní implementaci konceptu grafů . Můžete si vybrat grafovou reprezentaci (například seznam sousedství nebo matici sousedství ), datový typ (typ GRAPHod LEDA , Graph*od Stanford GraphBase , std::vectorod STL ) a algoritmus z velké sady algoritmů, včetně: [10 ]

#include <iostream> #include <seznam> #include <algoritmus> #include <boost/graph/adjacency_list.hpp> #include <boost/graph/topological_sort.hpp> #include <iterátor> #include <utilita> int main ( int , char * []) { pomocí posílení jmenného prostoru ; // typ grafu typedef adjacency_list < vecS , vecS , directionalS , property < vertex_color_t , default_color_type > > Graph ; // vertex deskriptor typedef boost :: graph_traits < Graph >:: vertex_descriptor Vertex ; // kontejner pro řetězec vrcholů typedef std :: vector < Vertex > kontejner ; // typ znázornění oblouků grafu typedef std :: pair < ​​​​std :: size_t , std :: size_t > Pair ; // Hrany grafu Hrany páru [ 6 ] = { Pár ( 0 , 1 ), Pár ( 2 , 4 ), Pár ( 2 , 5 ) Pár ( 0 , 3 ), Pár ( 1 , 4 ), Pár ( 4 , 3 ) }; // Graf G ( hrany , hrany + 6 , 6 ); // slovník pro získání čísel vrcholů pomocí deskriptoru vrcholu boost :: property_map < Graph , vertex_index_t >:: type id = get ( vertex_index , G ); // kontejner pro uložení setříděných vrcholů kontejner c ; // provedení topological_sort ( G , std :: back_inserter ( c )); // Výstup výsledku: výčet deskriptorů grafu v kontejneru, // získání pořadových čísel vrcholů std :: cout << "Topologická kontrola: " ; for ( container :: reverse_iterator ii = c . rbegin (); ii != c . rend (); ++ ii ) std :: cout << id [ * ii ] << " " ; std :: cout << std :: endl ; návrat 0 ; }

Více Knihovna grafů Boost [11] .

Multithreading

Příklad kódu znázorňující vytváření vláken:

#include <boost/thread/thread.hpp> #include <iostream> pomocí jmenného prostoru std ; void hello_world () { cout << "Ahoj světe, já jsem vlákno!" << endl ; } int main ( int argc , char * argv []) { // spustí nové vlákno, které volá funkci "hello_world" boost :: thread my_thread ( & hello_world ); // počkejte, až vlákno dokončí my_thread . připojit se (); návrat 0 ; }

Podrobnosti lze nalézt v dokumentaci [12] a článcích v Dr. Dobb's Journal popisující knihovnu. [13] [14]

Známý je také projekt C++ knihovny fondu vláken založený na Boost.Thread, [15] , který implementuje stejnojmenný návrhový vzor..

Viz také

Poznámky

  1. https://www.boost.org/users/history/version_1_80_0.html
  2. Vydání 1.80.0 – 2022.
  3. Rozšířená softwarová licence . Získáno 19. února 2006. Archivováno z originálu 29. srpna 2008.
  4. Technická zpráva knihovny . Získáno 19. února 2006. Archivováno z originálu 11. prosince 2017.
  5. Základní knihovna lineární algebry
  6. Přehled operací uBLAS
  7. Boost Random Number Library . Získáno 19. února 2006. Archivováno z originálu 2. prosince 2008.
  8. Spirit User's Guide . Získáno 7. srpna 2011. Archivováno z originálu 7. srpna 2011.
  9. Zvýšit regulární výraz . Datum přístupu: 28. ledna 2011. Archivováno z originálu 25. února 2009.
  10. Jeremy Sik et al., 2006 .
  11. 1 2 The Boost Graph Library (BGL) . Datum přístupu: 23. července 2012. Archivováno z originálu 3. června 2012.
  12. Reference API Boost.Threads . Získáno 15. prosince 2008. Archivováno z originálu dne 13. října 2008.
  13. Úvod do Boost.Threads Archivováno 5. září 2008 na Wayback Machine v Dr. Dobbův deník . (2002)
  14. Co je nového v Boost Threads? Archivováno 21. února 2009 na Wayback Machine u Dr. Dobbův deník . (2008)
  15. knihovna threadpool . Získáno 5. května 2022. Archivováno z originálu dne 15. června 2020.

Odkazy

Literatura