Boost – kolekcja bibliotek programistycznych poszerzających możliwości języka C++, objętych liberalną licencją Boost Software License.
Pakiet Boost dostarcza m.in. biblioteki ogólnego przeznaczenia (inteligentne wskaźniki, wyrażenia regularne), biblioteki stanowiące warstwę abstrakcji dla systemu operacyjnego (obsługa systemów plików czy wielowątkowości), narzędzia przeznaczone głównie dla innych twórców bibliotek i programistów języka C++ (np. biblioteka metaprogramowania MPL). Kilka bibliotek wchodzących w poczet Boost zostało włączonych do pierwszego raportu technicznego komitetu standaryzacyjnego C++ (w jego skład wchodzi wielu spośród twórców Boost). W Boost wykorzystywane jest programowanie z użyciem szablonów.
Boost zapewnia biblioteki poszerzające możliwości języka C++ w następujących dziedzinach:
Boost zawiera bibliotekę algebry liniowej o nazwie uBLAS, która ułatwia wykonywanie operacji na wektorach i macierzach.
#include <boost/numeric/ublas/vector.hpp>
#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/io.hpp>
using namespace boost::numeric::ublas;
/* przykład mnożenia "y = Ax" */
int main () {
vector<double> x (2);
x(0) = 1; x(1) = 2;
matrix<double> A(2,2);
A(0,0) = 0; A(0,1) = 1;
A(1,0) = 2; A(1,1) = 3;
vector<double> y = prod(A, x);
std::cout << y << std::endl;
return 0;
}
Boost zawiera kilka generatorów liczb pseudolosowych, wraz z narzędziami umożliwiającymi uzyskanie wielu rozkładów danych.
#include <boost/random.hpp>
#include <ctime>
using namespace boost;
double SampleNormal (double mean, double sigma)
{
// wybór generatora liczb
mt19937 rng;
// zadanie jako ziarna generatora liczby sekund od roku 1970
rng.seed(static_cast<unsigned> (std::time(0)));
// wybór pożądanego rozkładu
normal_distribution<double> norm_dist(mean, sigma);
// złączenie generatora i rozkładu przez obiekt funkcyjny
variate_generator<mt19937&, normal_distribution<double> > normal_sampler(rng, norm_dist);
// próbka rozkładu
return normal_sampler();
}
Biblioteka Boost.Thread zapewnia możliwość programowania współbieżnego w jednolity sposób w różnych systemach operacyjnych. Ceną za uniwersalny charakter biblioteki jest ograniczona funkcjonalność w stosunku do dedykowanych rozwiązań dla systemów posiksowych jak i windowsowych.
#include <boost/thread/thread.hpp>
#include <iostream>
using namespace std;
void hello_world()
{
cout << "Witaj świecie, jestem wątkiem!" << endl;
}
int main(int argc, char* argv[])
{
// utwórz nowy wątek wywołujący funkcję "hello_world"
boost::thread my_thread(&hello_world);
// poczekaj na zakończenie wątku
my_thread.join();
return 0;
}