COMPARTILHEBoost é uma coleção de bibliotecas que estendem a funcionalidade da linguagem de programação C++. Possui uma licença especial, desenvolvida para ser utilizada em qualquer projeto. Várias bibliotecas presentes na Boost já foram aceitas no TR1 da próxima especificação da biblioteca padrão do C++1 (cujo nome é informalmente conhecido como C++0x2 ), sendo que vários dos fundadores da Boost estão no próprio comitê de padronização da linguagem.
Devido à ampla revisão e controle de qualidade, as bibliotecas incluídas possuem grande qualidade, sendo destinadas a uma vasta gama de usuários do C++, em diversos domínios. As possibilidades passam desde bibliotecas gerais como smart_ptr3 e abstrações do sistema operacional como o filesystem4 a bibliotecas para usuários avançados como a MPL5 .
Para garantir eficiência e flexibilidade, o Boost faz uso extensivo de templates, tornando-se uma fonte de pesquisa para o desenvolvimento de programação genérica e metaprogramação em C++. Para utilizá-la, o desenvolvedor deve estar familiarizado com o estilo C++, isto é, a tendência em utilizar o C++ como um linguagem própria ao invés de uma extensão do C.
Álgebra linear
É incluída uma biblioteca de álgebra linear chamada uBLAS, com suporte BLAS para arranjos e matrizes. Abaixo segue um exemplo de uso:
// exemplo mostrando como multiplicar um vetor por uma matriz
#include <boost/numeric/ublas/vector.hpp>
#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/io.hpp>
using namespace boost::numeric::ublas;
/* "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;
}
Geração de números aleatórios
É incluída uma biblioteca para a geração de vários números pseudo-aleatórios. Abaixo segue um exemplo de uso:
// exemplo mostrando como obter uma distribuição normal
#include <boost/random.hpp>
#include <ctime>
using namespace boost;
double SampleNormal (double mean, double sigma)
{
// seleciona o gerador de número aleatório
mt19937 rng;
// gerador padrão com o número de segundos desde 1970
rng.seed(static_cast<unsigned> (std::time(0)));
// escolha da distribuição de probabilidade desejada
normal_distribution<double> norm_dist(mean, sigma);
// relaciona o gerador de número aleatório à distribuição, formando uma função
variate_generator<mt19937&, normal_distribution<double> > normal_sampler(rng, norm_dist);
// obtendo um valor da distribuição
return normal_sampler();
}
Multiprocessamento
Segue abaixo exemplo de criação de threads:
#include <boost/thread/thread.hpp>
#include <iostream>
using namespace std;
void ola_mundo()
{
cout << "Ola mundo, sou uma thread!" << endl;
}
int main(int argc, char* argv[])
{
// inicia uma nova thread que chama a função ola_mundo
boost::thread minha_thread( &ola_mundo );
// espera a thread finalizar
minha_thread.join();
return 0;
}
Pessoas associadas ao Boost
Autor de vários livros sobre o C++, Nicolai Josuttis contribuiu com a biblioteca de arranjos do Boost em 2001. Fundadores do grupo ainda ativos na comunidade incluem Beman Dawes6 e David Abrahams7 .
Nenhum comentário:
Postar um comentário