quarta-feira, 11 de junho de 2014

BIBLIOTECA BOOST

COMPARTILHE
Boost é 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