Boost — набір бібліотек, які розширюють функціональність . Більшість бібліотек поширюються під ліцензією Boost Software License [ 29 серпня 2008 у Wayback Machine.], розробленої для використання як з проєктами з відкритим сирцевим кодом, так і закритим. Проєкт був створений після прийняття стандарту , коли багато хто був незадоволеним невключенням в стандарт деяких бібліотек. Багато з фундаторів Boost є членами (комітету зі стандартизіції C++) і декілька Boost бібліотек були прийняті для включення до та . Версія 1.76 налічує вже 164 окремі бібліотеки.
Тип | бібліотека (програмування) |
---|---|
Стабільний випуск | 1.78.0 (8 жовтня 2021 ) |
Операційна система | Кросплатформний |
Мова програмування | С++ |
Ліцензія | Boost Software License |
Онлайн-документація | boost.org/doc/libs/release/ |
Репозиторій | github.com/boostorg/boost |
Вебсайт | boost.org |
|
Загальний огляд
Boost має помітну спрямованість на дослідження і розширюваність (метапрограмування і узагальнене програмування з активним використанням шаблонів). Завдяки ретельному підбору і контролю якості бібліотеки, включені в 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 [ 2 грудня 2008 у Wayback Machine.] і .
Генерація випадкових чисел
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 [ 2 грудня 2008 у Wayback Machine.].
Розбір тексту
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 [ 15 лютого 2009 у Wayback Machine.].
Використання регулярних виразів
Boost.Regex — бібліотека роботи з регулярними виразами. Має необхідний функціонал для фільтрації, пошуку, розбору і обробки тексту.
Приклад програми для розбору тексту
#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 [ 25 лютого 2009 у Wayback Machine.].
Алгоритми на графах
Boost Graph надає гнучку і ефективну реалізацію концепції графів у вигляді кількох подань графу і великої кількості алгоритмів.
Приклад виконання алгоритму топологічного сортування:
#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 [ 14 жовтня 2008 у Wayback Machine.].
Багатопотоковість
Приклад коду, що показує створення :
#include <boost/thread/thread.hpp> #include <iostream> using namespace std; void hello_world() { cout << "Привіт світ, я потік!" << endl; } int main(int argc, char* argv[]) { // запустити новий потік, що викликає функцію "hello_world" boost::thread my_thread (&hello_world); // чекаємо завершення потоку my_thread.join(); return 0; }
Докладніше
- Introduction to Boost.Threads [ 5 вересня 2008 у Wayback Machine.] в . (2002)
- переклад українською (Introduction to Boost.Threads) [ 26 серпня 2011 у Wayback Machine.]. (2011)
- What's New in Boost Threads? [ 21 лютого 2009 у Wayback Machine.] в . (2008)
- Boost.Threads API reference [ 13 жовтня 2008 у Wayback Machine.].
- threadpool library [ 15 червня 2020 у Wayback Machine.] на основі Boost.Thread
Ліцензія
Boost ліцензується власною вільною ліцензією, відомою як Boost Software License.
Виноски
- . Архів оригіналу за 11 грудня 2017. Процитовано 26 лютого 2009.
- . Архів оригіналу за 18 квітня 2021. Процитовано 18 квітня 2021.
- . Архів оригіналу за 26 травня 2010. Процитовано 26 лютого 2009.
{{}}
: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title ()
Посилання
- Домашня сторінка проєкту [ 24 лютого 2009 у Wayback Machine.](англ.)
- Список бібліотек [ 2 грудня 2008 у Wayback Machine.](англ.)
- Building Boost libraries [ 5 лютого 2009 у Wayback Machine.]
- Ще один переклад деяких частин документації [ 27 вересня 2007 у Wayback Machine.]
- Ще одна частково перекладена підбірка документації з Boost [ 9 липня 2009 у Wayback Machine.]
- Статті про Boost на сайті RSDN [ 8 грудня 2008 у Wayback Machine.]
Це незавершена стаття про програмування. Ви можете проєкту, виправивши або дописавши її. |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Boost nabir bibliotek yaki rozshiryuyut funkcionalnist C Bilshist bibliotek poshiryuyutsya pid licenziyeyu Boost Software License 29 serpnya 2008 u Wayback Machine rozroblenoyi dlya vikoristannya yak z proyektami z vidkritim sircevim kodom tak i zakritim Proyekt buv stvorenij pislya prijnyattya standartu C koli bagato hto buv nezadovolenim nevklyuchennyam v standart deyakih bibliotek Bagato z fundatoriv Boost ye chlenami komitetu zi standartiziciyi C i dekilka Boost bibliotek buli prijnyati dlya vklyuchennya do ta C 0x Versiya 1 76 nalichuye vzhe 164 okremi biblioteki BoostTip biblioteka programuvannya Stabilnij vipusk 1 78 0 8 zhovtnya 2021 2 roki tomu 2021 10 08 Operacijna sistema KrosplatformnijMova programuvannya S Licenziya Boost Software LicenseOnlajn dokumentaciya boost org doc libs release Repozitorij github com boostorg boostVebsajt boost org Mediafajli u VikishovishiZagalnij oglyadBoost maye pomitnu spryamovanist na doslidzhennya i rozshiryuvanist metaprogramuvannya i uzagalnene programuvannya z aktivnim vikoristannyam shabloniv Zavdyaki retelnomu pidboru i kontrolyu yakosti biblioteki vklyucheni v Boost mayut visoku nadijnist i produktivnist Dumki shodo vikoristannya riznyatsya Deyaki vvazhayut jogo standartom de fakto i neobhidnim dopovnennyam do STL Deyaki navpaki unikayut vsyakogo vikoristannya biblioteki v proyektah oskilki ce zajva zalezhnist v proyekti i dlya vikoristannya cih bibliotek programistovi neobhidno dobre znati C oskilki deyaki chastini Boost vimagayut dosit horoshoyi pidgotovki programista i ye velmi skladnimi BibliotekiBiblioteki Boost ohoplyuyut take Algoritmi Obhid pomilok v kompilyatorah ne vidpovidnih standartu Bagatonitkove programuvannya Kontejneri Yunit testuvannya Strukturi danih Funkcionalni ob yekti Uzagalnene programuvannya Grafi Vvedennya vivedennya Mizhmovna pidtrimka Iteratori Matematichni i chiselni algoritmi Robota z pam yattyu Sintaksichnij i leksichnij rozbir Rozumni vkazivniki Obrobka ryadkiv i tekstu Metaprogramuvannya na osnovi preprocesora Metaprogramuvannya na osnovi shablonivPrikladiLinijna algebra Boost vklyuchaye biblioteku linijnoyi algebri uBLAS z operaciyami dlya vektoriv i matric Priklad pokazuye mnozhennya vektora na matricyu include lt boost numeric ublas vector hpp gt include lt boost numeric ublas matrix hpp gt include lt boost numeric ublas io hpp gt using namespace boost numeric ublas y Ax priklad int main vector lt double gt x 2 x 0 1 x 1 2 matrix lt double gt A 2 2 A 0 0 0 A 0 1 1 A 1 0 2 A 1 1 3 vector lt double gt y prod A x std cout lt lt y lt lt std endl return 0 Dokladnishe dokumentaciya uBLAS 2 grudnya 2008 u Wayback Machine i Generaciya vipadkovih chisel Boost nadaye rizni generatori psevdovipadkovih chisel dlya kozhnogo z yakih mozhna zadavati konkretnij rozpodil Priklad pokazuye generaciyu vipadkovih chisel z normalnim rozpodilom include lt boost random hpp gt include lt ctime gt using namespace boost double SampleNormal double mean double sigma vibir generatora vipadkovih chisel mt19937 rng inicializaciya generatora chislom sekund z 1970 roku rng seed static cast lt unsigned gt std time 0 vibir potribnogo rozpodilu normal distribution lt double gt norm dist mean sigma priv yazka generatora do rozpodilu variate generator lt mt19937 amp normal distribution lt double gt gt normal sampler rng norm dist priklad roboti return normal sampler Dokladnishe Boost Random Number Library 2 grudnya 2008 u Wayback Machine Rozbir tekstu Spirit odna z najskladnishih chastin Boost priznachena dlya napisannya parseriv bezposeredno v teksti programi C u viglyadi blizkomu do formi Bekusa Naura Parser dlya chitannya chisel rozdilenih komoyu include lt boost spirit core hpp gt include lt boost spirit actor push back actor hpp gt include lt iostream gt include lt vector gt include lt string gt using namespace std using namespace boost spirit Parser rozdilenih komoyu chisel bool parse numbers const char str vector lt double gt amp v return parse str pochatok gramatiki real p push back a v gt gt gt gt real p push back a v kinec gramatiki space p full Dokladnishe Spirit User s Guide 15 lyutogo 2009 u Wayback Machine Vikoristannya regulyarnih viraziv Boost Regex biblioteka roboti z regulyarnimi virazami Maye neobhidnij funkcional dlya filtraciyi poshuku rozboru i obrobki tekstu Priklad programi dlya rozboru tekstu include lt boost regex hpp gt include lt vector gt include lt string gt Priklad programi rozboru URL int main int argc char argv Perevirka na chislo parametriv if argc lt 2 return 0 Kontejner dlya znachen std vector lt std string gt values Viraz dlya rozboru boost regex expression proto host port w d path file parameters Formuvannya pochatkovogo ryadka dlya rozboru beretsya z komandnogo ryadka std string src argv 1 Rozbir i zapovnennya kontejnera if boost regex split std back inserter values src expression Vivedennya rezultatu 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 Dokladnishe Boost Regex 25 lyutogo 2009 u Wayback Machine Algoritmi na grafah Boost Graph nadaye gnuchku i efektivnu realizaciyu koncepciyi grafiv u viglyadi kilkoh podan grafu i velikoyi kilkosti algoritmiv Priklad vikonannya algoritmu topologichnogo sortuvannya include lt iostream gt include lt list gt include lt algorithm gt include lt boost graph adjacency list hpp gt include lt boost graph topological sort hpp gt include lt iterator gt include lt utility gt int main int char using namespace boost tip grafu typedef adjacency list lt vecS vecS directedS property lt vertex color t default color type gt gt Graph opisuvach vershin typedef boost graph traits lt Graph gt vertex descriptor Vertex kontejner dlya lancyuzhka vershin typedef std vector lt Vertex gt container tip podannya dug grafu typedef std pair lt std size t std size t gt Pair Dugi grafu Pair edges 6 Pair 0 1 Pair 2 4 Pair 2 5 Pair 0 3 Pair 1 4 Pair 4 3 Graf Graph G edges edges 6 6 slovnik dlya otrimannya nomeriv vershin po opisuvachah vershin boost property map lt Graph vertex index t gt type id get vertex index G kontejner dlya zberigannya vidsortovanih vershin container c vikonannya algoritmu topological sort G std back inserter c Vivedennya rezultatu perebir opisuvachiv grafu v kontejneri otrimannya poryadkovih nomeriv vershin std cout lt lt Topologichna perevirka for container reverse iterator ii c rbegin ii c rend ii std cout lt lt id ii lt lt std cout lt lt std endl return 0 Dokladnishe Boost Graph Library 14 zhovtnya 2008 u Wayback Machine Bagatopotokovist Dokladnishe Bagatopotokovist Priklad kodu sho pokazuye stvorennya include lt boost thread thread hpp gt include lt iostream gt using namespace std void hello world cout lt lt Privit svit ya potik lt lt endl int main int argc char argv zapustiti novij potik sho viklikaye funkciyu hello world boost thread my thread amp hello world chekayemo zavershennya potoku my thread join return 0 Dokladnishe Introduction to Boost Threads 5 veresnya 2008 u Wayback Machine v 2002 pereklad ukrayinskoyu Introduction to Boost Threads 26 serpnya 2011 u Wayback Machine 2011 What s New in Boost Threads 21 lyutogo 2009 u Wayback Machine v 2008 Boost Threads API reference 13 zhovtnya 2008 u Wayback Machine threadpool library 15 chervnya 2020 u Wayback Machine na osnovi Boost ThreadLicenziyaBoost licenzuyetsya vlasnoyu vilnoyu licenziyeyu vidomoyu yak Boost Software License Vinoski Arhiv originalu za 11 grudnya 2017 Procitovano 26 lyutogo 2009 Arhiv originalu za 18 kvitnya 2021 Procitovano 18 kvitnya 2021 Arhiv originalu za 26 travnya 2010 Procitovano 26 lyutogo 2009 a href wiki D0 A8 D0 B0 D0 B1 D0 BB D0 BE D0 BD Cite web title Shablon Cite web cite web a Obslugovuvannya CS1 Storinki z tekstom archived copy yak znachennya parametru title posilannya PosilannyaDomashnya storinka proyektu 24 lyutogo 2009 u Wayback Machine angl Spisok bibliotek 2 grudnya 2008 u Wayback Machine angl Building Boost libraries 5 lyutogo 2009 u Wayback Machine She odin pereklad deyakih chastin dokumentaciyi 27 veresnya 2007 u Wayback Machine She odna chastkovo perekladena pidbirka dokumentaciyi z Boost 9 lipnya 2009 u Wayback Machine Statti pro Boost na sajti RSDN 8 grudnya 2008 u Wayback Machine Ce nezavershena stattya pro programuvannya Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi