出典(authority):フリー百科事典『ウィキペディア(Wikipedia)』「2015/10/24 19:12:59」(JST)
この項目では、C++のコミュニティについて説明しています。その他の用法については「ブースト」をご覧ください。 |
最新版 | 1.59.0 / 2015年8月13日(2か月前) (2015-08-13) |
---|---|
対応言語 | C++ |
種別 | Libraries |
ライセンス | Boost Software License |
公式サイト | http://www.boost.org |
テンプレートを表示 |
Boost (ブースト)とは、C++の先駆的な開発者のコミュニティ、及びそのコミュニティによって公開されているオープンソースライブラリのことを指す。コミュニティとしてのBoostはC++標準化委員会の委員により設立されており、現在でもその多くが構成員として留まっている。このような経緯もあり、BoostコミュニティはC++の標準化において大きな影響力を有している。実際に標準化委員会が発表した「TR1」の2/3以上がBoostライブラリを基にしている。Random, Regex, ThreadなどはいずれもC++11規格の標準ライブラリとして正式に導入・標準化されている。このことから、Boostは考案された新機能を標準化させる前の試験運用の場であるとも言える。
Boostで公開されるライブラリはコミュニティの公開レビューによって精選されている。Boostを使用して作成したプログラムは、商用、非商用を問わず無償のBoost Software Licenseの下でライセンスされる。
Boostはテンプレートなどを活用して積極的にメタプログラミングやジェネリックプログラミングの技法を取り入れて行く傾向がある。そのためBoostライブラリの利用者にはC++の現代的な記述に慣れていることを要求される。
Boostは次のような分野のライブラリが含まれている。
std::bitset-
に似たデータ構造Boostには、BLASのレベル1、2、3の各演算を実装したuBLASという線型代数 (linear algebra) ライブラリがある。
#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" example */
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はディストリビューション非依存の擬似乱数と、具体的な生成器を構築するために組み合わせる疑似乱数(PRNG)に依存しない確率分布を提供する。
#include <boost/random.hpp>
#include <ctime>
using namespace boost;
double SampleNormal (double mean, double sigma)
{
// 1970年からの秒でシードを一度初期化した
// メルセンヌ・ツイスタ乱数生成器の作成
static mt19937 rng(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を参照。
Spirit - バッカス・ナウア記法に出来るだけ近いC++のプログラム形式で直接パーサを記述するという、Boostにおける最も複雑なライブラリのひとつ。
#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;
// Parser comma-separated numbers
bool parse_numbers(const char* str, vector<double>& v)
{
return parse(str,
// Start grammar
(
real_p[push_back_a(v)] >> *(',' >> real_p[push_back_a(v)])
)
,
// End grammar
space_p).full;
}
詳細は Spirit User's Guide を参照。
Boost.Regex - 正規表現を利用するライブラリ。 フィルタ・検索・パース・テキスト処理に必要な各種関数を持っている。
Supports PCRE , POSIX BRE and ERE
#include <boost/regex.hpp>
#include <vector>
#include <string>
// Example program parsing the URL
int main(int argc, char** argv)
{
// Check the number of parameters
if (argc < 2) return 0;
// container for the values
std::vector<std::string> values;
// Expression to parse
boost::regex expression(
// proto host port
"^(\?:([^:/\?#]+)://)\?(\\w+[^/\?#:]*)(\?::(\\d+))\?"
// path file parameters
"(/\?(\?:[^\?#/]*/)*)\?([^\?#]*)\?(\\\?(.*))\?"
);
// The formation of the source string to parse (taken from command-line)
std::string src(argv[1]);
// Parse and filling the container
if (boost::regex_split(std::back_inserter(values), src, expression))
{
// Output the result
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 を参照。
Boost Graph provides a flexible and effective implementation of the concept of graphs in the form of multiple views of a graph and a large number of algorithms.
#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;
// Type of graph
typedef adjacency_list<vecS, vecS, directedS,
property<vertex_color_t, default_color_type> > Graph;
// Handle vertices
typedef boost::graph_traits<Graph>::vertex_descriptor Vertex;
// Container for the chain of vertices
typedef std::vector<Vertex> container;
// Type of representation of arcs
typedef std::pair<std::size_t,std::size_t> Pair;
// Edges of the graph
Pair edges[6] = { Pair(0,1), Pair(2,4),
Pair(2,5),
Pair(0,3), Pair(1,4),
Pair(4,3) };
// Count
Graph G(edges, edges + 6, 6);
// Dictionary to get a handle on the numbers of vertices vertices
boost::property_map<Graph, vertex_index_t>::type id = get(vertex_index, G);
// Container for storing the sorted vertices
container c;
// Execute algorithm
topological_sort(G, std::back_inserter(c));
// Output results: sorting descriptors of the graph in the container,
// Get the serial number of vertices
std::cout << "Topological check:";
for (container::reverse_iterator ii = c.rbegin(); ii != c.rend(); ++ii)
std::cout << id[*ii] << " ";
std::cout << std::endl;
return 0;
}
詳細は the Boost Graph Library を参照。
スレッドを生成しているコードの例
#include <boost/thread/thread.hpp>
#include <iostream>
using namespace std;
void hello_world()
{
cout << "Hello world, I'm a thread!" << endl;
}
int main()
{
// hello_world関数を呼び出す新しいスレッドを起動する。
boost::thread my_thread(&hello_world);
// スレッドが終了するまで待つ。
my_thread.join();
return 0;
}
|
Look up boost in Wiktionary, the free dictionary. |
Boost or boosting may refer to:
This disambiguation page lists articles associated with the title Boost. If an internal link led you here, you may wish to change the link to point directly to the intended article. |
全文を閲覧するには購読必要です。 To read the full text you will need to subscribe.
リンク元 | 「追加免疫」「ブースト」「後押しする」 |
拡張検索 | 「booster」 |
.