SlideShare a Scribd company logo
Enviar búsqueda
Cargar
Boost container feature
Denunciar
Compartir
Akira Takahashi
Programmer en Preferred Networks, Inc.
Seguir
•
4 recomendaciones
•
3,374 vistas
1
de
19
Boost container feature
•
4 recomendaciones
•
3,374 vistas
Denunciar
Compartir
Descargar ahora
Descargar para leer sin conexión
Akira Takahashi
Programmer en Preferred Networks, Inc.
Seguir
Recomendados
Development C++ Community por
Development C++ Community
Akira Takahashi
5.9K vistas
•
49 diapositivas
Study3 boost por
Study3 boost
Kohsuke Yuasa
1.7K vistas
•
45 diapositivas
Multi paradigm design por
Multi paradigm design
Akira Takahashi
3.2K vistas
•
26 diapositivas
Start Concurrent por
Start Concurrent
Akira Takahashi
22.8K vistas
•
19 diapositivas
俺とコミュニティ活動のタスク por
俺とコミュニティ活動のタスク
Masayuki KaToH
787 vistas
•
19 diapositivas
2014 08-30 life with roslyn por
2014 08-30 life with roslyn
shibuki
8.4K vistas
•
26 diapositivas
Más contenido relacionado
La actualidad más candente
俺とGitHubとcodeシリーズ por
俺とGitHubとcodeシリーズ
Masayuki KaToH
482 vistas
•
53 diapositivas
俺とGitHub por
俺とGitHub
Masayuki KaToH
705 vistas
•
92 diapositivas
俺とGitHub(先行公開ver.) por
俺とGitHub(先行公開ver.)
Masayuki KaToH
263 vistas
•
12 diapositivas
ソース管理しようぜ!Gitの部 por
ソース管理しようぜ!Gitの部
pmw1415
358 vistas
•
13 diapositivas
TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部 por
TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部
Masahiro Wakame
12.8K vistas
•
56 diapositivas
Roslynで体験してみるC#スクリプト #cs_fukuoka por
Roslynで体験してみるC#スクリプト #cs_fukuoka
Yuta Matsumura
2.1K vistas
•
25 diapositivas
La actualidad más candente
(20)
俺とGitHubとcodeシリーズ por Masayuki KaToH
俺とGitHubとcodeシリーズ
Masayuki KaToH
•
482 vistas
俺とGitHub por Masayuki KaToH
俺とGitHub
Masayuki KaToH
•
705 vistas
俺とGitHub(先行公開ver.) por Masayuki KaToH
俺とGitHub(先行公開ver.)
Masayuki KaToH
•
263 vistas
ソース管理しようぜ!Gitの部 por pmw1415
ソース管理しようぜ!Gitの部
pmw1415
•
358 vistas
TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部 por Masahiro Wakame
TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部
Masahiro Wakame
•
12.8K vistas
Roslynで体験してみるC#スクリプト #cs_fukuoka por Yuta Matsumura
Roslynで体験してみるC#スクリプト #cs_fukuoka
Yuta Matsumura
•
2.1K vistas
3日時間をもらったのでTypeScriptを触ってみた por Yasushi Kato
3日時間をもらったのでTypeScriptを触ってみた
Yasushi Kato
•
28K vistas
俺とPrivate Forkと炭の選び方とC++からRubyへのブレイクスルーとポモドーロテクニックとコミュニティ貢献と浪人アカウントと糖尿病 por Masayuki KaToH
俺とPrivate Forkと炭の選び方とC++からRubyへのブレイクスルーとポモドーロテクニックとコミュニティ貢献と浪人アカウントと糖尿病
Masayuki KaToH
•
382 vistas
俺とホットキー por Masayuki KaToH
俺とホットキー
Masayuki KaToH
•
723 vistas
TypeScript 独習会 por Masahiro Wakame
TypeScript 独習会
Masahiro Wakame
•
3K vistas
ChatOps with Hubot por Yoshiaki Yoshida
ChatOps with Hubot
Yoshiaki Yoshida
•
2.1K vistas
mrubyで作るマイコンボード por kishima7
mrubyで作るマイコンボード
kishima7
•
361 vistas
jQuery 対応ライブラリと TypeScript por インフラジスティックス・ジャパン株式会社
jQuery 対応ライブラリと TypeScript
インフラジスティックス・ジャパン株式会社
•
5K vistas
TypeScriptは明日から使うべき por Masahiro Wakame
TypeScriptは明日から使うべき
Masahiro Wakame
•
6.1K vistas
C#への招待 por Yusuke Matsushita
C#への招待
Yusuke Matsushita
•
3.4K vistas
古い?ダサい?まだまだイケルChef! por Naoto Ishizawa
古い?ダサい?まだまだイケルChef!
Naoto Ishizawa
•
792 vistas
TypeScript 1.0 Released! por Horuchi Hiroki
TypeScript 1.0 Released!
Horuchi Hiroki
•
1.1K vistas
俺と前回敗因から分析するバッドパターン por Masayuki KaToH
俺と前回敗因から分析するバッドパターン
Masayuki KaToH
•
500 vistas
ShibuyalispTT#4 LT 他言語で作ったWEBページをLispでも! por Toshiaki Maki
ShibuyalispTT#4 LT 他言語で作ったWEBページをLispでも!
Toshiaki Maki
•
1.2K vistas
Herokumeetup8 growライトニングトーク por 淳 竹野
Herokumeetup8 growライトニングトーク
淳 竹野
•
2.2K vistas
Destacado
C++14 solve explicit_default_constructor por
C++14 solve explicit_default_constructor
Akira Takahashi
7.3K vistas
•
7 diapositivas
Boost Tour 1_58_0 merge por
Boost Tour 1_58_0 merge
Akira Takahashi
4.8K vistas
•
114 diapositivas
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ por
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ
digitalghost
7.5K vistas
•
21 diapositivas
左と右の話 por
左と右の話
Cryolite
6.9K vistas
•
34 diapositivas
Boost.Graph入門 por
Boost.Graph入門
egtra
4K vistas
•
23 diapositivas
CG基礎3 メタリンク por
CG基礎3 メタリンク
Tetsuro Nakamura
630 vistas
•
4 diapositivas
Destacado
(20)
C++14 solve explicit_default_constructor por Akira Takahashi
C++14 solve explicit_default_constructor
Akira Takahashi
•
7.3K vistas
Boost Tour 1_58_0 merge por Akira Takahashi
Boost Tour 1_58_0 merge
Akira Takahashi
•
4.8K vistas
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ por digitalghost
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ
digitalghost
•
7.5K vistas
左と右の話 por Cryolite
左と右の話
Cryolite
•
6.9K vistas
Boost.Graph入門 por egtra
Boost.Graph入門
egtra
•
4K vistas
CG基礎3 メタリンク por Tetsuro Nakamura
CG基礎3 メタリンク
Tetsuro Nakamura
•
630 vistas
Boost study meeting opening 4 por Akira Takahashi
Boost study meeting opening 4
Akira Takahashi
•
994 vistas
ABC2015 Summer LT por Kensuke Onishi
ABC2015 Summer LT
Kensuke Onishi
•
533 vistas
boost - std - C# por Tatsuya Ishikawa
boost - std - C#
Tatsuya Ishikawa
•
2.9K vistas
boost::shared_ptr tutorial por NU_Pan
boost::shared_ptr tutorial
NU_Pan
•
2.9K vistas
The Earth is not flat; but it's not round either (Geography on Boost.Geometry) por Vissarion Fisikopoulos
The Earth is not flat; but it's not round either (Geography on Boost.Geometry)
Vissarion Fisikopoulos
•
465 vistas
Boost勉強会 #10 ディスカッションまとめ por Sigureya
Boost勉強会 #10 ディスカッションまとめ
Sigureya
•
1K vistas
Glfw3,OpenGL,GUI por hira_kuni_45
Glfw3,OpenGL,GUI
hira_kuni_45
•
3.1K vistas
boost and c++11 por Akihiko Matuura
boost and c++11
Akihiko Matuura
•
1.5K vistas
ゲーム開発経営ゲーム por Yuki Miyatake
ゲーム開発経営ゲーム
Yuki Miyatake
•
1.8K vistas
3DCAD@VDI活用とCADデータ管理のロードマップ por Dell TechCenter Japan
3DCAD@VDI活用とCADデータ管理のロードマップ
Dell TechCenter Japan
•
4.7K vistas
error handling using expected por Akira Takahashi
error handling using expected
Akira Takahashi
•
3K vistas
Boost tour 1.60.0 por Akira Takahashi
Boost tour 1.60.0
Akira Takahashi
•
2.1K vistas
3D CADと3Dプリンタ体験セミナー #1 por Kou Ouchi
3D CADと3Dプリンタ体験セミナー #1
Kou Ouchi
•
2.6K vistas
Unity MeshとColliderについて por Self Norl
Unity MeshとColliderについて
Self Norl
•
6.7K vistas
Similar a Boost container feature
C++ Now 2012 report por
C++ Now 2012 report
Akira Takahashi
1.1K vistas
•
29 diapositivas
Cppmix 01 por
Cppmix 01
Akira Takahashi
1K vistas
•
11 diapositivas
PHPからC#のライブラリを呼べるようにしたdotnet_ffiを趣味でつくってみた por
PHPからC#のライブラリを呼べるようにしたdotnet_ffiを趣味でつくってみた
johgus johgus
23 vistas
•
35 diapositivas
dwangocpp1-lt por
dwangocpp1-lt
karupanerura
1.7K vistas
•
20 diapositivas
Tensor flow勉強会3 por
Tensor flow勉強会3
tak9029
4.4K vistas
•
24 diapositivas
C++CLIで、ネイティブCの保守開発に.NETを使って楽をしよう por
C++CLIで、ネイティブCの保守開発に.NETを使って楽をしよう
Study Group by SciencePark Corp.
194 vistas
•
12 diapositivas
Similar a Boost container feature
(20)
C++ Now 2012 report por Akira Takahashi
C++ Now 2012 report
Akira Takahashi
•
1.1K vistas
Cppmix 01 por Akira Takahashi
Cppmix 01
Akira Takahashi
•
1K vistas
PHPからC#のライブラリを呼べるようにしたdotnet_ffiを趣味でつくってみた por johgus johgus
PHPからC#のライブラリを呼べるようにしたdotnet_ffiを趣味でつくってみた
johgus johgus
•
23 vistas
dwangocpp1-lt por karupanerura
dwangocpp1-lt
karupanerura
•
1.7K vistas
Tensor flow勉強会3 por tak9029
Tensor flow勉強会3
tak9029
•
4.4K vistas
C++CLIで、ネイティブCの保守開発に.NETを使って楽をしよう por Study Group by SciencePark Corp.
C++CLIで、ネイティブCの保守開発に.NETを使って楽をしよう
Study Group by SciencePark Corp.
•
194 vistas
Tickライブラリで遊ぼう(C++) por kotoji
Tickライブラリで遊ぼう(C++)
kotoji
•
2.2K vistas
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能 por Yoshifumi Kawai
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
Yoshifumi Kawai
•
42.8K vistas
Scala lang evolution por Akira Takahashi
Scala lang evolution
Akira Takahashi
•
2.5K vistas
C++でCプリプロセッサを作ったり速くしたりしたお話 por Kinuko Yasuda
C++でCプリプロセッサを作ったり速くしたりしたお話
Kinuko Yasuda
•
33.5K vistas
The History of LINQ por Yoshifumi Kawai
The History of LINQ
Yoshifumi Kawai
•
24.8K vistas
Boost17 cpplinq por miki_hirofumi
Boost17 cpplinq
miki_hirofumi
•
4K vistas
oFの話題が殆ど出ない oF jp Summer Workout por Tsuubito Ishii
oFの話題が殆ど出ない oF jp Summer Workout
Tsuubito Ishii
•
1.2K vistas
Mishimasyk6 iwatobipen por Takayuki Serizawa
Mishimasyk6 iwatobipen
Takayuki Serizawa
•
942 vistas
初音玲の流儀 - なんでプログラミングしているの? por Akira Hatsune
初音玲の流儀 - なんでプログラミングしているの?
Akira Hatsune
•
3.3K vistas
cbt (Cranberries Build Tool) por Wada Yuki
cbt (Cranberries Build Tool)
Wada Yuki
•
135 vistas
今時のオンプレなgithubクローン環境構築 por You&I
今時のオンプレなgithubクローン環境構築
You&I
•
197 vistas
Output Driven 20170721 por Shintaro Ikeda
Output Driven 20170721
Shintaro Ikeda
•
43 vistas
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ por Genya Murakami
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
Genya Murakami
•
52.4K vistas
Boost Overview por Akira Takahashi
Boost Overview
Akira Takahashi
•
2.2K vistas
Más de Akira Takahashi
Cpp20 overview language features por
Cpp20 overview language features
Akira Takahashi
890 vistas
•
28 diapositivas
Cppmix 02 por
Cppmix 02
Akira Takahashi
675 vistas
•
7 diapositivas
Modern C++ Learning por
Modern C++ Learning
Akira Takahashi
18.5K vistas
•
12 diapositivas
cpprefjp documentation por
cpprefjp documentation
Akira Takahashi
1.3K vistas
•
23 diapositivas
C++1z draft por
C++1z draft
Akira Takahashi
6.6K vistas
•
67 diapositivas
Boost tour 1_61_0 merge por
Boost tour 1_61_0 merge
Akira Takahashi
2K vistas
•
126 diapositivas
Más de Akira Takahashi
(20)
Cpp20 overview language features por Akira Takahashi
Cpp20 overview language features
Akira Takahashi
•
890 vistas
Cppmix 02 por Akira Takahashi
Cppmix 02
Akira Takahashi
•
675 vistas
Modern C++ Learning por Akira Takahashi
Modern C++ Learning
Akira Takahashi
•
18.5K vistas
cpprefjp documentation por Akira Takahashi
cpprefjp documentation
Akira Takahashi
•
1.3K vistas
C++1z draft por Akira Takahashi
C++1z draft
Akira Takahashi
•
6.6K vistas
Boost tour 1_61_0 merge por Akira Takahashi
Boost tour 1_61_0 merge
Akira Takahashi
•
2K vistas
Boost tour 1_61_0 por Akira Takahashi
Boost tour 1_61_0
Akira Takahashi
•
1.4K vistas
Boost tour 1.60.0 merge por Akira Takahashi
Boost tour 1.60.0 merge
Akira Takahashi
•
5.1K vistas
Boost Tour 1_58_0 por Akira Takahashi
Boost Tour 1_58_0
Akira Takahashi
•
2.5K vistas
C++14 enum hash por Akira Takahashi
C++14 enum hash
Akira Takahashi
•
8.1K vistas
Programmer mind por Akira Takahashi
Programmer mind
Akira Takahashi
•
10K vistas
Boost.Study 14 Opening por Akira Takahashi
Boost.Study 14 Opening
Akira Takahashi
•
4.1K vistas
Executors and schedulers por Akira Takahashi
Executors and schedulers
Akira Takahashi
•
7.4K vistas
Improvement future api por Akira Takahashi
Improvement future api
Akira Takahashi
•
7.9K vistas
C++14 variable templates por Akira Takahashi
C++14 variable templates
Akira Takahashi
•
5.7K vistas
C++14 relaxing constraints on constexpr por Akira Takahashi
C++14 relaxing constraints on constexpr
Akira Takahashi
•
4.7K vistas
C++14 binary literals por Akira Takahashi
C++14 binary literals
Akira Takahashi
•
4.9K vistas
Leaning random using Boost Random por Akira Takahashi
Leaning random using Boost Random
Akira Takahashi
•
6.2K vistas
C++14 Overview por Akira Takahashi
C++14 Overview
Akira Takahashi
•
11.8K vistas
Boost Tour 1.53.0 por Akira Takahashi
Boost Tour 1.53.0
Akira Takahashi
•
4.5K vistas
Boost container feature
1.
Boost.Container特有の機能 高橋 晶(Akira Takahashi) faithandbrave@longgate.co.jp 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はよく使いますし、 例外送出のカスタマイズは、何かあったときに、痒いところ に手が届いてくれて便利です。 •
どんどん使ってください!