Boost

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2019. november 30-án felülvizsgált verziótól ; az ellenőrzések 2 szerkesztést igényelnek .
Boost
Típusú könyvtár
Beírva C++
Operációs rendszer Cross platform
legújabb verzió
Állapot aktív
Engedély Boost szoftverlicenc
Weboldal boost.org
 Médiafájlok a Wikimedia Commons oldalon

A Boost  olyan osztálykönyvtárak gyűjteménye, amelyek a C++ nyelv funkcionalitását használják, és kényelmes, többplatformos, magas szintű interfészt biztosítanak a különféle mindennapi programozási részfeladatok tömör kódolásához (adatokkal, algoritmusokkal, fájlokkal, folyamokkal stb. végzett munka). Szabadon terjesztve a Boost Software License [3] alatt a forráskóddal együtt. A projekt a C++ szabvány elfogadása után jött létre , amikor sokan elégedetlenek voltak bizonyos könyvtárak hiányával az STL -ben . A projekt egyfajta "tesztelő terepe" a különböző nyelvi bővítményeknek és a könyvtárak egy részének [4] , amelyek a következő C++ szabványba való felvételre várnak .A Boost nagy hangsúlyt fektet a feltárásra és a bővíthetőségre ( metaprogramozás és sablonos általános programozás ).

Könyvtárak

A Boost könyvtárak a következőket fedik le:

Példák

Lineáris algebra

A Boost tartalmazza az uBLAS lineáris algebra könyvtárát vektor- és mátrixműveletekkel .

Példa a mátrix-vektor szorzásra:

#include <boost/numeric/ublas/vector.hpp> #include <boost/numeric/ublas/matrix.hpp> #include <boost/numeric/ublas/io.hpp> namespace boost használata :: numeric :: ublas ; // "y = Ax" példa int main () { vektor < double > x ( 2 ); x ( 0 ) = 1 ; x ( 1 ) = 2 ; mátrix < 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 ; return 0 ; }

Bővebben: uBLAS dokumentáció [5] és a műveletek leírása [6] .

Álvéletlen számgenerálás

A Boost különféle pszeudo-véletlenszám-generátorokat biztosít, amelyek mindegyike meghatározott eloszlást biztosít . Példa normális eloszlású véletlen számok generálására :

#include <boost/random.hpp> #include <ctime> névtér boost használata ; double SampleNormal ( dupla átlag , kettős szigma ) { // véletlenszám-generátor kiválasztása mt19937 rng ; // a generátor inicializálása a másodpercek számával 1970 óta rng . seed ( static_cast < unsigned > ( std :: time ( 0 ))); // a kívánt eloszlás kiválasztása normal_distribution < double > norm_dist ( mean , sigma ); // generátor hozzárendelése elosztáshoz variate_generator < mt19937 & , normal_distribution < double > > normal_sampler ( rng , norm_dist ); // működő példa return normal_sampler (); }

A részletekért lásd: Boost Random Number Library [7] .

Szöveg elemzése

A Spirit a Boost egyik legösszetettebb része, amelyet arra terveztek, hogy értelmezőket ( jar. parsers az angol  parser szóból ; "parse" - elemzés, elemzés) közvetlenül a C ++ program szövegébe írjon, a Backus-Naur formához közeli formában. . Példa egy értelmezőre vesszővel elválasztott számok olvasásához:

#include <boost/spirit/core.hpp> #include <boost/spirit/actor/push_back_actor.hpp> #include <iostream> #include <vektor> #include <karakterlánc> névtér használata std ; névtér használata boost :: spirit ; // Elemző vesszővel elválasztott számokhoz bool parse_numbers ( const char * str , vektor < double >& v ) { return parse ( str , // nyelvtan start ( real_p [ push_back_a ( v )] >> * ( ',' >> real_p [ push_back_a ( v )]) ) , // a nyelvtan vége space_p ). tele ; }

További információ a Spirit felhasználói kézikönyvben [8] .

Reguláris kifejezések használata

A Boost.Regex egy könyvtár a reguláris kifejezésekkel való munkavégzéshez . Rendelkezik a szűréshez, kereséshez, elemzéshez és szövegfeldolgozáshoz szükséges funkciókkal.

Támogatja a PCRE -t , a POSIX BRE -t és az ERE -t

Mintaprogram szövegelemzéshez:

#include <boost/regex.hpp> #include <vektor> #include <karakterlánc> // Minta URL elemző int main ( int argc , char ** argv ) { // Paraméterek számának ellenőrzése, ha ( argc < 2 ) return 0 ; // Tároló értékekhez std :: vektor < std :: string > értékek ; // Kifejezés a boost elemzéséhez :: regex kifejezés ( // proto gazdagép portja "^(?:([^:/?#]+)://)?( \\ w+[^/?#:]*)(?::( \\ d+))?" // elérési út fájl paraméterei "(/?(?:[^?#/]*/)*)?([^?#]*)?( \\ ?(.*))?" ); // Az elemzéshez szükséges forráskarakterlánc kialakítása (a parancssorból átvéve) std :: string src ( argv [ 1 ]); // Elemezze és töltse fel a tárolót if ( boost :: regex_split ( std :: back_inserter ( értékek ), src , kifejezés )) { // Az eredmény kiadása const char * names [] = { "Protocol" , "Host" , "Port" , "Path" , "File" , "Parameters" , NULL }; for ( int i = 0 ; nevek [ i ]; i ++ ) printf ( "%s:%s \n " , nevek [ i ], értékek [ i ]. c_str ()); } return 0 ; }

Bővebben Boost.Regex [9] .

Algoritmusok grafikonokon

A Boost Graph Library (BGL) a grafikonok koncepciójának rugalmas és hatékony megvalósítását biztosítja . Kiválaszthat gráfábrázolást (például szomszédsági listát vagy szomszédsági mátrixot ), adattípust ( LEDA - GRAPHból , Stanford GraphBase - ből , STL -ből ) és algoritmust számos algoritmus közül, beleértve: [10 ]Graph*std::vector

#include <iostream> #include <list> #include <algoritmus> #include <boost/graph/adjacency_list.hpp> #include <boost/graph/topological_sort.hpp> #include <iterátor> #include <segédprogram> int main ( int , char * []) { névtér boost használata ; // gráftípus typedef szomszédsági_lista < vecS , vecS , irányítottS , property < vertex_color_t , default_color_type > > Graph ; // csúcsleíró typedef boost :: graph_traits < Graph >:: vertex_descriptor Vertex ; // konténer egy csúcslánchoz typedef std :: vector < Vertex > container ; // gráfívek ábrázolási típusa typedef std :: pair < ​​​​std :: size_t , std :: size_t > Pair ; // Grafikon élei Élek párosítása [ 6 ] = { Pair ( 0 , 1 ), Pair ( 2 , 4 ), Pár ( 2 , 5 ) Pár ( 0 , 3 ), pár ( 1 , 4 ), Pár ( 4 , 3 ) }; // G grafikon ( élek , élek + 6 , 6 ); // szótár csúcsszámok lekéréséhez csúcsleíró szerint boost :: property_map < Graph , vertex_index_t >:: type id = get ( vertex_index , G ); // konténer rendezett csúcsok tárolására konténer c ; // topological_sort végrehajtása ( G , std :: back_inserter ( c )); // Az eredmény kimenete: gráfleírók felsorolása a tárolóban, // csúcsok sorszámának lekérése std :: cout << "Topológiai ellenőrzés: " ; for ( tároló :: reverse_iterator ii = c . rbegin (); ii != c . rend (); ++ ii ) std :: cout << id [ * ii ] << " " ; std :: cout << std :: endl ; return 0 ; }

További Boost Graph Library [11] .

Többszálú

A szálak létrehozását bemutató kódpélda:

#include <boost/thread/thread.hpp> #include <iostream> névtér használata std ; érvénytelen hello_world () { cout << "Helló világ, én cérna vagyok!" << endl ; } int main ( int argc , char * argv []) { // új szál indítása, amely meghívja a "hello_world" függvényt boost :: thread my_thread ( & hello_world ); // várja meg, amíg a szál befejeződik my_thread . csatlakozz (); return 0 ; }

Részletek a dokumentációban [12] és a Dr. Dobb's Journal , amely leírja a könyvtárat. [13] [14]

Ismert még a Boost.Thread alapú szálkészlet-könyvtár C++ projektje [15] , amely az azonos nevű tervezési mintát valósítja meg..

Lásd még

Jegyzetek

  1. https://www.boost.org/users/history/version_1_80_0.html
  2. 1.80.0 - 2022 kiadás.
  3. Boost szoftverlicenc . Letöltve: 2006. február 19. Az eredetiből archiválva : 2008. augusztus 29..
  4. Könyvtári műszaki jelentés . Letöltve: 2006. február 19. Az eredetiből archiválva : 2017. december 11..
  5. Alapvető Lineáris Algebra Könyvtár
  6. uBLAS műveletek áttekintése
  7. Boost Random Number Library . Letöltve: 2006. február 19. Az eredetiből archiválva : 2008. december 2..
  8. Spirit használati útmutató . Letöltve: 2011. augusztus 7. Az eredetiből archiválva : 2011. augusztus 7..
  9. A Regex növelése . Hozzáférés dátuma: 2011. január 28. Az eredetiből archiválva : 2009. február 25.
  10. Jeremy Sik et al., 2006 .
  11. 1 2 A Boost Graph Library (BGL) . Hozzáférés dátuma: 2012. július 23. Az eredetiből archiválva : 2012. június 3.
  12. Boost.Threads API hivatkozás . Letöltve: 2008. december 15. Az eredetiből archiválva : 2008. október 13..
  13. Bevezetés a Boost.Threads -be archiválva 2008. szeptember 5-én a Wayback Machine - nél Dr. Dobb folyóirata . (2002)
  14. A Boost Threads újdonságai? Archivált 2009. február 21-én a Wayback Machine -nél Dr. Dobb folyóirata . (2008)
  15. threadpool könyvtár . Letöltve: 2022. május 5. Az eredetiből archiválva : 2020. június 15.

Linkek

Irodalom