Submit Search
Boost container feature
4 likes
3,384 views
Akira Takahashi
1 of 19
Download now
Downloaded 12 times
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
More Related Content
PDF
Development C++ Community
Akira Takahashi
PDF
Study3 boost
Kohsuke Yuasa
PDF
Multi paradigm design
Akira Takahashi
PDF
Start Concurrent
Akira Takahashi
PPTX
俺とコミュニティ活動のタスク
Masayuki KaToH
PPTX
2014 08-30 life with roslyn
shibuki
PPTX
俺と2016コミュニティ活動振り返り
Masayuki KaToH
PPTX
Ha4goもくもく報告2016年11月分
Masayuki KaToH
Development C++ Community
Akira Takahashi
Study3 boost
Kohsuke Yuasa
Multi paradigm design
Akira Takahashi
Start Concurrent
Akira Takahashi
俺とコミュニティ活動のタスク
Masayuki KaToH
2014 08-30 life with roslyn
shibuki
俺と2016コミュニティ活動振り返り
Masayuki KaToH
Ha4goもくもく報告2016年11月分
Masayuki KaToH
What's hot
(20)
PPTX
俺とGitHubとcodeシリーズ
Masayuki KaToH
PPTX
俺とGitHub
Masayuki KaToH
PPTX
俺とGitHub(先行公開ver.)
Masayuki KaToH
PPTX
ソース管理しようぜ!Gitの部
pmw1415
PDF
TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部
Masahiro Wakame
PDF
Roslynで体験してみるC#スクリプト #cs_fukuoka
Yuta Matsumura
PDF
3日時間をもらったのでTypeScriptを触ってみた
Yasushi Kato
PPTX
俺とPrivate Forkと炭の選び方とC++からRubyへのブレイクスルーとポモドーロテクニックとコミュニティ貢献と浪人アカウントと糖尿病
Masayuki KaToH
PPTX
俺とホットキー
Masayuki KaToH
PDF
TypeScript 独習会
Masahiro Wakame
PDF
ChatOps with Hubot
Yoshiaki Yoshida
PPTX
mrubyで作るマイコンボード
kishima7
PDF
jQuery 対応ライブラリと TypeScript
インフラジスティックス・ジャパン株式会社
PDF
TypeScriptは明日から使うべき
Masahiro Wakame
PDF
C#への招待
Yusuke Matsushita
PPTX
古い?ダサい?まだまだイケルChef!
Naoto Ishizawa
PPTX
TypeScript 1.0 Released!
Horuchi Hiroki
PPTX
俺と前回敗因から分析するバッドパターン
Masayuki KaToH
PPTX
ShibuyalispTT#4 LT 他言語で作ったWEBページをLispでも!
Toshiaki Maki
PDF
Herokumeetup8 growライトニングトーク
淳 竹野
俺とGitHubとcodeシリーズ
Masayuki KaToH
俺とGitHub
Masayuki KaToH
俺とGitHub(先行公開ver.)
Masayuki KaToH
ソース管理しようぜ!Gitの部
pmw1415
TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部
Masahiro Wakame
Roslynで体験してみるC#スクリプト #cs_fukuoka
Yuta Matsumura
3日時間をもらったのでTypeScriptを触ってみた
Yasushi Kato
俺とPrivate Forkと炭の選び方とC++からRubyへのブレイクスルーとポモドーロテクニックとコミュニティ貢献と浪人アカウントと糖尿病
Masayuki KaToH
俺とホットキー
Masayuki KaToH
TypeScript 独習会
Masahiro Wakame
ChatOps with Hubot
Yoshiaki Yoshida
mrubyで作るマイコンボード
kishima7
jQuery 対応ライブラリと TypeScript
インフラジスティックス・ジャパン株式会社
TypeScriptは明日から使うべき
Masahiro Wakame
C#への招待
Yusuke Matsushita
古い?ダサい?まだまだイケルChef!
Naoto Ishizawa
TypeScript 1.0 Released!
Horuchi Hiroki
俺と前回敗因から分析するバッドパターン
Masayuki KaToH
ShibuyalispTT#4 LT 他言語で作ったWEBページをLispでも!
Toshiaki Maki
Herokumeetup8 growライトニングトーク
淳 竹野
Ad
Viewers also liked
(20)
PDF
C++14 solve explicit_default_constructor
Akira Takahashi
PDF
Boost Tour 1_58_0 merge
Akira Takahashi
PDF
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ
digitalghost
PPTX
左と右の話
Cryolite
PPTX
Boost.Graph入門
egtra
PDF
CG基礎3 メタリンク
Tetsuro Nakamura
PDF
Boost study meeting opening 4
Akira Takahashi
PDF
ABC2015 Summer LT
Kensuke Onishi
PPTX
boost - std - C#
Tatsuya Ishikawa
PDF
boost::shared_ptr tutorial
NU_Pan
PDF
The Earth is not flat; but it's not round either (Geography on Boost.Geometry)
Vissarion Fisikopoulos
DOCX
Boost勉強会 #10 ディスカッションまとめ
Sigureya
PDF
Glfw3,OpenGL,GUI
hira_kuni_45
PDF
boost and c++11
Akihiko Matuura
PPTX
ゲーム開発経営ゲーム
Yuki Miyatake
PDF
3DCAD@VDI活用とCADデータ管理のロードマップ
Dell TechCenter Japan
PDF
error handling using expected
Akira Takahashi
PDF
Boost tour 1.60.0
Akira Takahashi
PPTX
3D CADと3Dプリンタ体験セミナー #1
Kou Ouchi
PPTX
Unity MeshとColliderについて
Self Norl
C++14 solve explicit_default_constructor
Akira Takahashi
Boost Tour 1_58_0 merge
Akira Takahashi
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ
digitalghost
左と右の話
Cryolite
Boost.Graph入門
egtra
CG基礎3 メタリンク
Tetsuro Nakamura
Boost study meeting opening 4
Akira Takahashi
ABC2015 Summer LT
Kensuke Onishi
boost - std - C#
Tatsuya Ishikawa
boost::shared_ptr tutorial
NU_Pan
The Earth is not flat; but it's not round either (Geography on Boost.Geometry)
Vissarion Fisikopoulos
Boost勉強会 #10 ディスカッションまとめ
Sigureya
Glfw3,OpenGL,GUI
hira_kuni_45
boost and c++11
Akihiko Matuura
ゲーム開発経営ゲーム
Yuki Miyatake
3DCAD@VDI活用とCADデータ管理のロードマップ
Dell TechCenter Japan
error handling using expected
Akira Takahashi
Boost tour 1.60.0
Akira Takahashi
3D CADと3Dプリンタ体験セミナー #1
Kou Ouchi
Unity MeshとColliderについて
Self Norl
Ad
More from Akira Takahashi
(20)
PPTX
Cpp20 overview language features
Akira Takahashi
PDF
Cppmix 02
Akira Takahashi
PPTX
Cppmix 01
Akira Takahashi
PDF
Modern C++ Learning
Akira Takahashi
PDF
cpprefjp documentation
Akira Takahashi
PDF
C++1z draft
Akira Takahashi
PDF
Boost tour 1_61_0 merge
Akira Takahashi
PDF
Boost tour 1_61_0
Akira Takahashi
PDF
Boost tour 1.60.0 merge
Akira Takahashi
PDF
Boost Tour 1_58_0
Akira Takahashi
PDF
C++14 enum hash
Akira Takahashi
PDF
Programmer mind
Akira Takahashi
PDF
Boost.Study 14 Opening
Akira Takahashi
PDF
Executors and schedulers
Akira Takahashi
PDF
Improvement future api
Akira Takahashi
PDF
C++14 variable templates
Akira Takahashi
PDF
C++14 relaxing constraints on constexpr
Akira Takahashi
PDF
C++14 binary literals
Akira Takahashi
PDF
Leaning random using Boost Random
Akira Takahashi
PDF
C++14 Overview
Akira Takahashi
Cpp20 overview language features
Akira Takahashi
Cppmix 02
Akira Takahashi
Cppmix 01
Akira Takahashi
Modern C++ Learning
Akira Takahashi
cpprefjp documentation
Akira Takahashi
C++1z draft
Akira Takahashi
Boost tour 1_61_0 merge
Akira Takahashi
Boost tour 1_61_0
Akira Takahashi
Boost tour 1.60.0 merge
Akira Takahashi
Boost Tour 1_58_0
Akira Takahashi
C++14 enum hash
Akira Takahashi
Programmer mind
Akira Takahashi
Boost.Study 14 Opening
Akira Takahashi
Executors and schedulers
Akira Takahashi
Improvement future api
Akira Takahashi
C++14 variable templates
Akira Takahashi
C++14 relaxing constraints on constexpr
Akira Takahashi
C++14 binary literals
Akira Takahashi
Leaning random using Boost Random
Akira Takahashi
C++14 Overview
Akira Takahashi
Boost container feature
1.
Boost.Container特有の機能 高橋 晶(Akira Takahashi)
[email protected]
2015/05/30
Boost.勉強会 #17 東京
2.
自己紹介 1/2 • 高橋
晶(Akira Takahashi) • システム系とかゲーム系とか、いろいろな開発をやってます。 • 最近は、プロ向けの教育の仕事とか、Emscriptenを使って C++でブラウザゲームを作っていたりしました。
3.
自己紹介 2/2 • 著書:
『C++テンプレートテクニック』 『C++ポケットリファレンス』『プログラミングの魔導書』 シリーズ • C++の日本語リファレンスサイトcpprefjpを作っています。 • Boostの日本語情報サイトboostjpを作っています。 • そのほか、たまにBoostにpull requestを投げたりしています
4.
C++ポケットリファレンス • C++14に対応した第2版は、2015年6月4日(木)に発売です
5.
本日のお題:Boost.Container • この発表では、Boostのコンテナライブラリについて 話します。 • Boost.Containerには、標準ライブラリとほとんど同じ機能 が入っているため、あまり使われていないように思います。 •
しかし実際には、標準ライブラリよりもこちらを使った方が いい、というような機能が多々入っています。 • 今回の発表では、Boost.Container特有の便利な機能を 紹介していきます。
6.
Boost.Containerとは • 作者Ion Gaztañaga •
C++標準化委員会で、コンテナ関係の仕様を決めてる人 • 標準コンテナの最新仕様を、標準規格の更新を待たず、 すぐに試せることを目的としたライブラリ。 • この発表では、C++11標準コンテナの知識を前提として、 Boost.Containerの拡張機能やその他特徴を紹介します。
7.
話すこと • あらゆる環境向けに、ひとつの実装 • 標準以外のコンテナ •
要素のデフォルト値を未初期化にする • realloc機能に対応したアロケータ • 例外送出のカスタマイズ • 連想コンテナの拡張オプション
8.
あらゆる環境向けに、ひとつの実装 標準コンテナは、環境ごとにコンテナの実装が異なる。 Boost.Containerでは実装がひとつなので、以下のようなことを期待して 使用できる: • メモリ確保する場所・条件が一定 • たとえば、デフォルトコンストラクタはメモリ確保しない (なので、例外を送出しない) •
basic_stringのSmall String Optimization • 短い文字列については、スタックを使用する • ただし、デフォルトのメモリアロケータは、環境ごとの mallocを使用するので、パフォーマンスは一定ではない
9.
標準以外のコンテナ 1/5 Boost.Containerには、標準ライブラリにはない拡張コンテナが いくつか用意されている • stable_vector •
flat_map/flat_set • static_vector • small_vector
10.
標準以外のコンテナ 2/5 stable_vector • vectorとlistのハイブリッド •
伸長や消去をした際に、イテレータと参照が無効にならない • メモリが連続していない • 定数時間でランダムアクセスできる
11.
標準以外のコンテナ 3/5 flat_map /
flat_set • ソート済みvectorとしての、順序付き連想コンテナ • ツリー構造ではないからflat(平坦) • イテレーションが標準連想コンテナよりも高速 • メモリ消費が標準連想コンテナよりも小さい • 検索は対数時間
12.
標準以外のコンテナ 4/5 static_vector • 動的メモリ確保せず、スタックを使用するvector •
第2テンプレート引数で、最大の要素数を指定して、それを 超えないように使用する。超えたらbad_alloc例外。 boost::container::static_vector<int, 3> v; // 3要素まで伸長できる ! // 要素の追加 v.push_back(3); v.push_back(1); v.push_back(4); // 4回目は、やってはいけない ! for (int x : v) { std::cout << x << std::endl; }
13.
標準以外のコンテナ 5/5 small_vector • 小さい要素数に特化したvector。 •
第2テンプレート引数で、事前にメモリ確保する要素数を指 定する。その要素数を超えたら再確保。 boost::container::small_vector<int, 3> v; // 3要素分を事前にメモリ確保 ! v.push_back(3); v.push_back(1); v.push_back(4); // ここまで、メモリの再確保なし ! for (int x : v) { std::cout << x << std::endl; }
14.
要素のデフォルト値を未初期化にする namespace cont =
boost::container; ! // 要素数を3個で構築 cont::vector<int> v(3, cont::default_init); ! // 要素数を4に伸長する v.resize(4, cont::default_init); • vectorのresize()は、伸ばした分の要素を、値初期化する • 巨大な動的配列を作る際には、値初期化のコストが無視できなくなる • Boost.Containerのvectorは、要素を未初期化にする拡張を提供して いる
15.
realloc機能に対応したアロケータ namespace cont =
boost::container; cont::vector<int, cont::allocator<int, 2>> v; ! v.reserve(3); v.push_back(3); v.push_back(1); v.push_back(4); v.push_back(5); // メモリ領域を伸長する • vectorは、要素を伸長した際に、キャパシティを超えたら別な場所に、 より大きな領域を確保して要素を移動する。 • boost::container::allocator<T, 2>を使用すると、 realloc相当の機能で、いま確保しているメモリ領域を伸ばしてくれる。 • この機能は、dlmallocを改良して実装されている。 詳細は、Boost.勉強会 #15 札幌での、池田さんの発表を参照。
16.
例外送出のカスタマイズ • Boost.Containerは、例外送出について、いくつかのカスタマイズ方法を提供している • BOOST_NO_EXCEPTIONSをdefineする •
例外送出のところで、std::abort()を呼び出して異常終了する • BOOST_CONTAINER_USER_DEFINED_THROW_CALLBACKSをdefineする • 例外の送出方法を自分で決める • これによって、例外発生時に、ログやバックトレース等を埋め込める #define BOOST_CONTAINER_USER_DEFINED_THROW_CALLBACKS #include <boost/container/vector.hpp> ! namespace boost { namespace container { void throw_out_of_range(const char* str) // カスタマイズ用のハンドラ { output_log(str); // ログ出力 throw std::out_of_range(str); } }}
17.
連想コンテナの拡張オプション • Boost.Containerの順序付き連想コンテナは、 ツリー構造のオプションを指定できる。 using namespace
boost::container; ! // AVL木を使用する using AvlTree = tree_assoc_options< tree_type<avl_tree> >::type; using AvlSet = set<int, std::less<>, AVLTree>; ! // スプレー木を使用する // 最近アクセスした要素に、高速にアクセスできる(償却対数時間) using SplayTree = tree_assoc_options< tree_type<splay_tree> >::type; using SplaySet = set<int, std::less<>, SplayTree>; ! // スケープゴート木を使用する // 挿入と削除が償却対数時間になる using ScapegoatTree = tree_assoc_options< tree_type<scapegoat_tree> >::type; using ScapegoatSet = set<int, std::less<>, ScapeGoatTree>;
18.
そのほか • vector<bool>の特殊化はありません。設計ミスと言われて いる機能は、Boost.Containerでは採用していません。 • C++1zで採用予定の、「不完全型のサポート」が、 static_vectorとbasic_string以外に対して入っています。 •
Boost.Interprocessと組み合わせることで、ファイルとの メモリマップができます。 オンメモリに乗らない巨大なデータを扱えます。
19.
まとめ • Boost.Containerには、いろいろな場面で役立つ機能が多々 入っています。 • スタックを使用するstatic_vectorはよく使いますし、 例外送出のカスタマイズは、何かあったときに、痒いところ に手が届いてくれて便利です。 •
どんどん使ってください!
Download