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 ).
A Boost könyvtárak a következőket fedik le:
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] .
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] .
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] .
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] .
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
További Boost Graph Library [11] .
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..