Boost

Boost
Boost
Boost.png
Тип

библиотека (программирование)

Написана на

С++

Операционная система

Кроссплатформенный

Последняя версия

Boost 1.52.0 (05.11.2012)

Лицензия

Boost Software License

Сайт

http://www.boost.org/

Boost — собрание библиотек, расширяющих функциональность C++. Свободно распространяются по лицензии Boost Software License[1] вместе с исходным кодом. Проект был создан после принятия стандарта C++, когда многие были недовольны невключением в стандарт некоторых библиотек. Проект является своего рода «испытательным полигоном» для различных расширений языка и часть библиотек[2] являются кандидатами на включение в следующий стандарт C++.

Boost имеет заметную направленность на исследования и расширяемость (метапрограммирование и обобщённое программирование с активным использованием шаблонов). Некоторые программисты считают его стандартом де-факто и необходимым дополнением к STL. Другие, напротив, избегают всякого использования библиотеки в проектах, опасаясь введения излишней зависимости в проект и считая, что использование этих библиотек слишком повышают требования к знанию программистом C++, так как некоторые части Boost являются весьма сложными.

Содержание

Библиотеки

Библиотеки Boost охватывают следующее:

Примеры

Линейная алгебра

Boost включает библиотеку линейной алгебры uBLAS, с операциями для векторов и матриц.

  • Пример, показывающий умножение матрицы на вектор:
#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;
}

Подробнее: документация uBLAS[3] и описание операций[4].

Генерация случайных чисел

Boost предоставляет различные генераторы псевдослучайных чисел, для каждого из которых можно задавать конкретное распределение.

#include <boost/random.hpp>
#include <ctime>
 
using namespace boost;
 
double SampleNormal (double mean, double sigma)
{
    // выбор генератора случайных чисел
    mt19937 rng;
    // инициализация генератора числом секунд с 1970 года
    rng.seed(static_cast<unsigned> (std::time(0)));
 
    // выбор нужного распределения
    normal_distribution<double> norm_dist(mean, sigma);
 
    // привязка генератора к распределению
    variate_generator<mt19937&, normal_distribution<double> >  normal_sampler(rng, norm_dist);
 
    // пример работы
    return normal_sampler();
}

Подробнее см. Boost Random Number Library[5].

Разбор текста

Spirit — одна из наиболее сложных частей Boost, предназначенная для написания парсеров напрямую в C++ тексте программы в виде близком к форме Бэкуса-Наура.

  • Парсер для чтения чисел, разделённых запятой:
#include <boost/spirit/core.hpp>
#include <boost/spirit/actor/push_back_actor.hpp>
#include <iostream>
#include <vector>
#include <string>
 
using namespace std;
using namespace boost::spirit;
 
//  Парсер разделённых запятой чисел
bool parse_numbers(const char* str, vector<double>& v)
{
   return parse(str,
       //  начало грамматики
       (
           real_p[push_back_a(v)] >> *(',' >> real_p[push_back_a(v)])
       )
       ,
       //  конец грамматики
       space_p).full;
}

Подробнее Spirit User’s Guide[6].

Использование регулярных выражений

Boost.Regex — библиотека работы с регулярными выражениями. Имеет необходимую функциональность для фильтрации, поиска, разбора и обработки текста.

Поддерживает PCRE, POSIX BRE и ERE

  • Пример программы для разбора текста
#include <boost/regex.hpp>
#include <vector>
#include <string>
 
// Пример программы разбора URL
int main(int argc, char** argv)
{
    // Проверка на число параметров
    if (argc < 2) return 0;
 
    // Контейнер для значений
    std::vector<std::string> values;
    // Выражение для разбора
    boost::regex expression(
        //       proto                 host               port
        "^(\?:([^:/\?#]+)://)\?(\\w+[^/\?#:]*)(\?::(\\d+))\?"
        //       path                  file       parameters
        "(/\?(\?:[^\?#/]*/)*)\?([^\?#]*)\?(\\\?(.*))\?"
                       );
    // Формирование исходной строки для разбора (берется из командной строки)
    std::string src(argv[1]);
 
    // Разбор и заполнение контейнера
    if (boost::regex_split(std::back_inserter(values), src, expression))
    {
        // Вывод результата
        const char* names[] = {"Protocol", "Host", "Port", "Path", "File", "Parameters", NULL};
        for (int i = 0; names[i]; i++)
            printf("%s: %s\n", names[i], values[i].c_str());
    }
    return 0;
}

Подробнее Boost.Regex[7].

Алгоритмы на графах

Boost Graph Library (BGL) предоставляет гибкую и эффективную реализацию концепции графов. Можно выбрать представление графа (например, список смежности или матрица смежности), тип данных (тип GRAPH из LEDA, Graph* из Stanford GraphBase, std::vector из STL) и алгоритм из большого набора алгоритмов, среди которых:[8]

#include <iostream>
#include <list>
#include <algorithm>
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/topological_sort.hpp>
#include <iterator>
#include <utility>
 
int main(int , char* [])
{
  using namespace boost;
 
 // тип графа
 typedef adjacency_list<vecS, vecS, directedS, 
   property<vertex_color_t, default_color_type> > Graph;
 // дескриптор вершин
 typedef boost::graph_traits<Graph>::vertex_descriptor Vertex;
 // контейнер для цепочки вершин
 typedef std::vector<Vertex> container;
 // тип представления дуг графа
 typedef std::pair<std::size_t,std::size_t> Pair;
 
 // Дуги графа 
 Pair edges[6] = { Pair(0,1), Pair(2,4),
                   Pair(2,5),
                   Pair(0,3), Pair(1,4),
                   Pair(4,3) };
 // Граф
 Graph G(edges, edges + 6, 6);
 // словарь для получения номеров вершин по дескриптору вершин
 boost::property_map<Graph, vertex_index_t>::type id = get(vertex_index, G);
 // контейнер для хранения отсортированных вершин
 container c;
 
 // выполнение алгоритма
 topological_sort(G, std::back_inserter(c));
 
 // Вывод результата: перебор дескрипторов графа в контейнере,
 // получение порядковых номеров вершин
 std::cout << "Топологическая проверка: ";
 for (container::reverse_iterator ii = c.rbegin(); ii != c.rend(); ++ii)
   std::cout << id[*ii] << " ";
 std::cout << std::endl;
 
 return 0;
}

Подробнее Boost Graph Library[9].

Многопоточность

Пример кода, показывающий создание потоков:

#include <boost/thread/thread.hpp>
#include <iostream>
 
using namespace std; 
 
void hello_world() 
{
  cout << "Здравствуй мир, я - thread!" << endl;
}
 
int main(int argc, char* argv[]) 
{
  // запустить новый поток, вызывающий функцию "hello_world"
  boost::thread my_thread(&hello_world);
  // ждем завершения потока
  my_thread.join();
 
  return 0;
}

Подробности можно найти в документации[10] и в статьях в Dr. Dobb's Journal, описывающих библиотеку.[11][12]

Известен также основанный на Boost.Thread проект C++ библиотеки thread pool,[13] реализующей одноимённый шаблон проектирования (англ.)русск..

См. также

Примечания

Ссылки

Литература

  • Джереми Сик, Лай-Кван Ли, Эндрю Ламсдэйн. C++ Boost Graph Library. — Питер, 2006. — 304 с. — ISBN 5-469-00352-3

Wikimedia Foundation. 2010.

Игры ⚽ Поможем написать реферат

Полезное


Смотреть что такое "Boost" в других словарях:

  • Boost — can refer to: NOTOC cience, technology and mathematics* Automotive: ** Boost, positive manifold pressure in cars, see turbocharger#Boost threshold. *** a loose term for turbo or supercharger ** A slang term meaning to start a vehicle, see jump… …   Wikipedia

  • Boost — steht für: Boost (C++ Bibliothek), eine freie C++ Bibliothek Die spezielle Lorentztransformation (auch Lorentz Boost), die in der speziellen Relativitätstheorie verwendet wird, um von einem Koordinatensystem in ein anderes umzurechnen Boost… …   Deutsch Wikipedia

  • Boost — C++ Libraries Développeur Communauté de Boost Dernière version …   Wikipédia en Français

  • boost — [n1] increase addition, advance, breakthrough, expansion, hike, improvement, increment, jump, lift, raise, rise, step up, up, upgrade, wax; concepts 700,780 Ant. blow, decrease, hindrance, setback boost [n2] encouragement aid, assistance, backup …   New thesaurus

  • boost — boost·er; boost·er·ism; boost; de·boost; …   English syllables

  • boost — ☆ boost [bo͞ost ] vt. [< ?] 1. to raise by or as by a push from behind or below; push up 2. to urge others to support; promote [to boost a program] 3. to make higher or greater; increase in amount, power, etc. [to boost taxes, boost electric… …   English World dictionary

  • Boost — (b[=oo]st), v. t. [imp. & p. p. {Boosted}; p. pr. & vb. n. {Boosting}.] [Cf. {Boast}, v. i.] To lift or push from behind (one who is endeavoring to climb); to push up; hence, to assist in overcoming obstacles, or in making advancement. [Colloq. U …   The Collaborative International Dictionary of English

  • Boost — (b[=oo]st), n. A push from behind, as to one who is endeavoring to climb; help. [Colloq. U. S.] [1913 Webster] …   The Collaborative International Dictionary of English

  • Boost — Boost, Johann Adam, geb. 1775 in Aschaffenburg, ging 1793 nach Paris, ward Mitglied des Nationalconvents, trat in die Rheinarmee ein, lebte dann als Forstmeister u. später bei der Generalcontrôle beschäftigt, in darmstädtischen Diensten; in… …   Pierer's Universal-Lexikon

  • boost — index boom (increase), elevate, encourage, enhance, favor, help, impetus, increase …   Law dictionary


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»