Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
Hiro H.
9,075 views
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
C++1zに導入される見込みの高くなったライブラリ string_view についてお話しします。
Technology
◦
Read more
5
Save
Share
Embed
Embed presentation
Download
Downloaded 10 times
1
/ 71
2
/ 71
Most read
3
/ 71
4
/ 71
5
/ 71
6
/ 71
7
/ 71
8
/ 71
9
/ 71
10
/ 71
11
/ 71
12
/ 71
13
/ 71
14
/ 71
15
/ 71
16
/ 71
17
/ 71
18
/ 71
19
/ 71
20
/ 71
21
/ 71
22
/ 71
23
/ 71
24
/ 71
25
/ 71
26
/ 71
27
/ 71
28
/ 71
29
/ 71
30
/ 71
31
/ 71
32
/ 71
33
/ 71
34
/ 71
35
/ 71
36
/ 71
37
/ 71
38
/ 71
39
/ 71
40
/ 71
41
/ 71
42
/ 71
43
/ 71
44
/ 71
Most read
45
/ 71
46
/ 71
47
/ 71
48
/ 71
49
/ 71
50
/ 71
51
/ 71
52
/ 71
53
/ 71
54
/ 71
55
/ 71
56
/ 71
57
/ 71
58
/ 71
59
/ 71
60
/ 71
61
/ 71
62
/ 71
63
/ 71
Most read
64
/ 71
65
/ 71
66
/ 71
67
/ 71
68
/ 71
69
/ 71
70
/ 71
71
/ 71
More Related Content
PDF
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】
by
Hiro H.
PPTX
冬のLock free祭り safe
by
Kumazaki Hiroki
PDF
C++ マルチスレッド 入門
by
京大 マイコンクラブ
PPTX
C#や.NET Frameworkがやっていること
by
信之 岩永
PDF
ゲーム開発者のための C++11/C++14
by
Ryo Suzuki
PDF
DSIRNLP #3 LZ4 の速さの秘密に迫ってみる
by
Atsushi KOMIYA
PPTX
【Unity道場スペシャル 2017大阪】クォータニオン完全マスター
by
Unity Technologies Japan K.K.
PDF
中3女子でもわかる constexpr
by
Genya Murakami
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】
by
Hiro H.
冬のLock free祭り safe
by
Kumazaki Hiroki
C++ マルチスレッド 入門
by
京大 マイコンクラブ
C#や.NET Frameworkがやっていること
by
信之 岩永
ゲーム開発者のための C++11/C++14
by
Ryo Suzuki
DSIRNLP #3 LZ4 の速さの秘密に迫ってみる
by
Atsushi KOMIYA
【Unity道場スペシャル 2017大阪】クォータニオン完全マスター
by
Unity Technologies Japan K.K.
中3女子でもわかる constexpr
by
Genya Murakami
What's hot
PDF
パタヘネゼミ 第6章
by
okuraofvegetable
PDF
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
by
Genya Murakami
PPTX
エラーハンドリング
by
道化師 堂華
PDF
いまさら聞けない!CUDA高速化入門
by
Fixstars Corporation
PDF
Djangoのエントリポイントとアプリケーションの仕組み
by
Shinya Okano
PDF
전형규, 좋은 이름, 나쁜 이름, 이상한 이름, NDC2018
by
devCAT Studio, NEXON
PDF
Scala 初心者が米田の補題を Scala で考えてみた
by
Kazuyuki TAKASE
PDF
【CEDEC2018】CPUを使い切れ! Entity Component System(通称ECS) が切り開く新しいプログラミング
by
Unity Technologies Japan K.K.
PDF
20分くらいでわかった気分になれるC++20コルーチン
by
yohhoy
PDF
第2部 自作ライブラリ紹介
by
らりお ザ・何とは言わない天然水ソムリエ
PDF
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
by
shinjiigarashi
PDF
ユークリッド最小全域木
by
理玖 川崎
PPTX
x86x64 SSE4.2 POPCNT
by
takesako
PDF
メルカリ・ソウゾウでは どうGoを活用しているのか?
by
Takuya Ueda
PDF
VRM 標準シェーダ MToon の使い方
by
VirtualCast, Inc.
PDF
PEGで構文解析をする
by
jiro4989
PDF
CUDAのアセンブリ言語基礎のまとめ PTXとSASSの概説
by
Takateru Yamagishi
PPTX
AESについて 輪講資料
by
Sorasuke
PDF
C++ マルチスレッドプログラミング
by
Kohsuke Yuasa
PPTX
乱数調整概説
by
Blastoise_X
パタヘネゼミ 第6章
by
okuraofvegetable
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
by
Genya Murakami
エラーハンドリング
by
道化師 堂華
いまさら聞けない!CUDA高速化入門
by
Fixstars Corporation
Djangoのエントリポイントとアプリケーションの仕組み
by
Shinya Okano
전형규, 좋은 이름, 나쁜 이름, 이상한 이름, NDC2018
by
devCAT Studio, NEXON
Scala 初心者が米田の補題を Scala で考えてみた
by
Kazuyuki TAKASE
【CEDEC2018】CPUを使い切れ! Entity Component System(通称ECS) が切り開く新しいプログラミング
by
Unity Technologies Japan K.K.
20分くらいでわかった気分になれるC++20コルーチン
by
yohhoy
第2部 自作ライブラリ紹介
by
らりお ザ・何とは言わない天然水ソムリエ
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
by
shinjiigarashi
ユークリッド最小全域木
by
理玖 川崎
x86x64 SSE4.2 POPCNT
by
takesako
メルカリ・ソウゾウでは どうGoを活用しているのか?
by
Takuya Ueda
VRM 標準シェーダ MToon の使い方
by
VirtualCast, Inc.
PEGで構文解析をする
by
jiro4989
CUDAのアセンブリ言語基礎のまとめ PTXとSASSの概説
by
Takateru Yamagishi
AESについて 輪講資料
by
Sorasuke
C++ マルチスレッドプログラミング
by
Kohsuke Yuasa
乱数調整概説
by
Blastoise_X
Similar to Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
PDF
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」
by
Hiro H.
PDF
Boost Tour 1.50.0
by
Akira Takahashi
PDF
Boost Tour 1_58_0 merge
by
Akira Takahashi
PDF
Boost tour 1.60.0 merge
by
Akira Takahashi
PDF
Boost.Flyweight
by
gintenlabo
PDF
Boost tour 1_44_0
by
Akira Takahashi
PDF
2012.11.17 CLR/H&札幌C++勉強会 発表資料「部分文字列の取得を効率よく!楽に! - fundoshi.hppの紹介と今後の予定 -」
by
Hiro H.
PDF
Boost Tour 1.53.0 merge
by
Akira Takahashi
PDF
Hello Dark-Side C# (Part. 1)
by
Yuto Takei
PPTX
C++0x総復習
by
道化師 堂華
PDF
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第5回 ‟配列と構造体„
by
和弘 井之上
PPTX
C++ tips4 cv修飾編
by
道化師 堂華
PPTX
Prosym2012
by
MITSUNARI Shigeo
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」
by
Hiro H.
Boost Tour 1.50.0
by
Akira Takahashi
Boost Tour 1_58_0 merge
by
Akira Takahashi
Boost tour 1.60.0 merge
by
Akira Takahashi
Boost.Flyweight
by
gintenlabo
Boost tour 1_44_0
by
Akira Takahashi
2012.11.17 CLR/H&札幌C++勉強会 発表資料「部分文字列の取得を効率よく!楽に! - fundoshi.hppの紹介と今後の予定 -」
by
Hiro H.
Boost Tour 1.53.0 merge
by
Akira Takahashi
Hello Dark-Side C# (Part. 1)
by
Yuto Takei
C++0x総復習
by
道化師 堂華
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第5回 ‟配列と構造体„
by
和弘 井之上
C++ tips4 cv修飾編
by
道化師 堂華
Prosym2012
by
MITSUNARI Shigeo
More from Hiro H.
PDF
シンデレラガールズの「シンプルな」カードゲームを作りたい(アイマスハッカソン2024)
by
Hiro H.
PDF
pandas便利だけどデフォルトパラメータでファイルを読み込むな!
by
Hiro H.
PDF
式を書くだけで最適化計算してほしい!~CVXPY編~
by
Hiro H.
PDF
旅行「#重複乗車禁止で名鉄完乗」とその数学的な解説
by
Hiro H.
PDF
シンデレラガール総選挙の「50位圏内の難しさ」はいかほどか?(23:20更新)
by
Hiro H.
PDF
「MVが3人な曲の一覧」って取得できます?(デレステ・ミリシタ・エムステ)
by
Hiro H.
PDF
配列の要素挿入・削除もランダムアクセスも両方高速にできる?
by
Hiro H.
PDF
PCSじゃないよ、PCAだよ
by
Hiro H.
PDF
声優やぞ!~シンデレラガールズにおける配役の歴史のRDFデータ化~
by
Hiro H.
PDF
スマホ音楽ゲームの動画から譜面をデータ化したかった
by
Hiro H.
PDF
シンデレラガールズ声優の増え方まとめ
by
Hiro H.
PDF
札幌C++勉強会 #13「最近、仕事でC++11以降の新規格が役に立ったシーン紹介」
by
Hiro H.
PDF
わんくま同盟 名古屋勉強会 #43 ライトニングトーク「Firefoxがver.57~(Quantum)にアップグレードされて困ったこと・やったこと」
by
Hiro H.
PDF
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
by
Hiro H.
PDF
最近デレステ創作譜面作ってるので技術的な見地から話します
by
Hiro H.
PDF
C++のライブラリを簡単に眺めてみよう
by
Hiro H.
PDF
デレステの劇場で登場したアイドルの回数の統計取ってます
by
Hiro H.
PDF
名古屋市営地下鉄最小距離完乗
by
Hiro H.
PDF
MSYS2使いはじめました
by
Hiro H.
PDF
関数の最小値を求めることから機械学習へ
by
Hiro H.
シンデレラガールズの「シンプルな」カードゲームを作りたい(アイマスハッカソン2024)
by
Hiro H.
pandas便利だけどデフォルトパラメータでファイルを読み込むな!
by
Hiro H.
式を書くだけで最適化計算してほしい!~CVXPY編~
by
Hiro H.
旅行「#重複乗車禁止で名鉄完乗」とその数学的な解説
by
Hiro H.
シンデレラガール総選挙の「50位圏内の難しさ」はいかほどか?(23:20更新)
by
Hiro H.
「MVが3人な曲の一覧」って取得できます?(デレステ・ミリシタ・エムステ)
by
Hiro H.
配列の要素挿入・削除もランダムアクセスも両方高速にできる?
by
Hiro H.
PCSじゃないよ、PCAだよ
by
Hiro H.
声優やぞ!~シンデレラガールズにおける配役の歴史のRDFデータ化~
by
Hiro H.
スマホ音楽ゲームの動画から譜面をデータ化したかった
by
Hiro H.
シンデレラガールズ声優の増え方まとめ
by
Hiro H.
札幌C++勉強会 #13「最近、仕事でC++11以降の新規格が役に立ったシーン紹介」
by
Hiro H.
わんくま同盟 名古屋勉強会 #43 ライトニングトーク「Firefoxがver.57~(Quantum)にアップグレードされて困ったこと・やったこと」
by
Hiro H.
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
by
Hiro H.
最近デレステ創作譜面作ってるので技術的な見地から話します
by
Hiro H.
C++のライブラリを簡単に眺めてみよう
by
Hiro H.
デレステの劇場で登場したアイドルの回数の統計取ってます
by
Hiro H.
名古屋市営地下鉄最小距離完乗
by
Hiro H.
MSYS2使いはじめました
by
Hiro H.
関数の最小値を求めることから機械学習へ
by
Hiro H.
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
1.
C++1zにstring_viewが 導入されてうれしいので 紹介します H.Hiro (@h_hiro_)
2.
お久しぶりです H.Hiroです
3.
•名古屋で研究の仕事しています •C++はかなり使います (新しいアルゴリズムを考えて試す) •Boostは最近ちょっとご無沙汰… •最近、開発したいプログラムのネタが 思い浮かぶも時間が取れず停滞中
4.
今回のテーマ
5.
部分文字列
6.
みんな 使いますよね
7.
std::string foo = "Boost
C++ Library"; std::string bar = foo.substr(6, 3); std::cout << bar << std::endl; // prints "C++"
8.
ただ、これ C++を使っている人だと 「使いたくない」 ってときもありませんか
9.
ただ、これ C++を実行効率重視の ために使っている人だと 「使いたくない」 ってときもありませんか
10.
std::string foo = "Boost
C++ Library"; std::string bar = foo.substr(6, 3); ヒープ領域 (newとかで確保されたメモリ領域に利用する)
11.
std::string foo = "Boost
C++ Library"; std::string bar = foo.substr(6, 3); ヒープ領域 (newとかで確保されたメモリ領域に利用する) B o o s t C + + L i b r a r y
12.
std::string foo = "Boost
C++ Library"; std::string bar = foo.substr(6, 3); ヒープ領域 (newとかで確保されたメモリ領域に利用する) B o o s t C + + L i b r a r y C + +
13.
std::string foo = "Boost
C++ Library"; std::string bar = foo.substr(6, 3); std::cout << bar << std::endl; // prints "C++" substrする 文字数ぶんの メモリを 確保する必要
14.
そこで、 考えられる方法
15.
そもそも、文字列って 連続したメモリ領域に 確保されてるんだから B o o
s t C + + L i b r a r y
16.
B o o
s t C + + L i b r a r y std::string foo = "Boost C++ Library"; std::pair<const char*, std::size_t> bar = std::make_pair( , ); 別にこれで いいじゃないか 長ささえわかればよい始点のポインタと &foo[6] 3
17.
これが 今回紹介する string_viewの 大枠です
18.
std::string foo =
"Boost C++ Library"; std::pair<const char*, std::size_t> bar = std::make_pair( , ); string_viewとは 単に「 と を組にして保持する クラス」です &foo[6] 3 始点のポインタ 長さ
19.
ちなみに
20.
実装の説明は これでほとんど 終わりです
21.
が、もちろん、 これで 終わるわけは ありません
22.
「実際の使い方」 「どんな場面で使われているのか」 「私が何でこれを時間をかけて紹介 しようと思ったのか」 なども紹介します
23.
使ってみる
24.
string_viewの実装状況 gccの場合:gcc7で対応予定 https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html clangの場合:? Visual Studioの場合:?
25.
標準で入ること 前提でコードを 書くのは もう少し待つとして
26.
Boost.string_view を使います
27.
•もともと、Boostでは 「boost::string_ref」という クラス名でした •Boost 1.61.0以降 「boost::string_view」が追加され 若干機能が増えています ※C++標準として当初提案されたもの(N3442) のみならず、より新しいもの(N4480)を 反映させているようです
29.
boost.string_viewにあって boost.string_refにないもの traits対応 move対応(?) noexcept対応
30.
使う
31.
ヘッダファイル だけで利用できる Boost ライブラリなので
32.
Boostのサイトで ダウンロードして
33.
そのパスを読み込む ようにすればいいだけ $ g++ sample.cpp -I
ダウンロードしたパス
34.
コード例
35.
#include <boost/utility/string_view.hpp> // "utility"必要です!
36.
// さっきのコードを // boost.string_viewで //
書き換えてみる std::string foo = "Boost C++ Library"; boost::string_view bar(&foo[6], 3); std::cout << bar << std::endl;
37.
// 元の文字列が変わると、 // string_view側も変わる //
(あくまで、元の文字列の // 一部を参照しているだけ) (前ページに続いて) foo[7] = 'P'; foo[8] = 'P'; std::cout << bar << std::endl;
38.
// string_viewのコンストラクタ // 引数1つ boost::string_view
sv1("foo"); // const char* std::string b("bar"); boost::string_view sv2(b); // std::string boost::string_view sv3(sv2); // string_view // 引数2つ // 「const char* ポインタ, 長さ」。 // 「std::string, 長さ」などはできない。 boost::string_view sv4(sv1.data(), 3); boost::string_view sv4(b.data(), 3);
39.
// string_viewのAPI // std::stringと似たものが揃っている //
※内容を変更するAPIはない boost::string_view sv1("boost"); std::cout << sv1[2] << std::endl; // 'o' boost::string_view sv6 = sv1.substr(1, 3); std::cout << sv6 << std::endl; // "oos" std::cout << sv1.find("oo") << std::endl; // 見つけられる。この場合1になる
40.
APIがstd::stringと 一貫性を持たせて あるので
41.
std::stringを 使い慣れていれば そんなに手間は 感じないだろうし
42.
今まで引数をstd::stringに していたものを、string_viewに 置き換えるのも楽 char foo(const std::string
& bar) { return bar[0]; } ↓ char foo(boost::string_view bar) { return bar[0]; } ※string_viewはstd::stringから暗黙に変換可
43.
「本当はstd::stringじゃないんだけど std::stringみたいな性質を持ってる から、似た扱いができるようにしよう」 と設計されてるのがポイントです (デザインパターンでは 「Proxy(代理)パターン」といいます)
44.
boost::string_viewで利用できるメソッド <std::stringと共通> size length max_size
empty begin end (c, r付き含む) front back at data clear operator[] compare (各種比較演算子を含む) find (rfindなども含む) substr <独自のもの> remove_prefix remove_suffix
45.
string_viewは どんな場面で 使われているのか
46.
最初に 言いたかったこと
47.
私も、ほぼ同じ 機能のライブラリが 欲しくて、作った ことがあった
48.
fundoshi.hpp (2011年初版公開) https://github.com/maraigue/fundoshi.hpp
49.
fundoshi.hpp (2011年初版公開) https://github.com/maraigue/fundoshi.hpp 参照: 2012.11.17 CLR/H&札幌C++勉強会 発表資料 http://www.slideshare.net/maraigue/20121117-clrhc-fundoshihpp このときは、 文字列検索アルゴリズムのために 利用していた
50.
かなり後になって 同じようなことを している人が 多数いると知った
51.
汎用的なライブラリ •StringPiece (Google) ライブラリの一機能として提供 •Qtの "QStringRef" •Swiftの
"CFStringRef" •JUCEの "StringRef" 内部処理のために?利用 •LLVMの "StringRef" •gRPCの "string_ref"
52.
だから、 Boostにも入ったし のちに標準化も されたといえる
53.
実際、 どんな場面で 使われているのか
54.
利用例: Qtの "QStringRef" がある箇所 •QRegularExpressionMatch (正規表現のマッチング結果) •XMLパーサーの解析結果
55.
QString foo("boost C++
library"); QRegularExpression pat("C.."); QRegularExpressionMatch mat = pat.match(foo); mat.capturedRef(); // ↑マッチした部分をQStringRefで返す
56.
Boost.String_Refのドキュメントに 書かれていた、利用が見込まれる ケース •HTTPレスポンスから、必要な 部分だけを返す さっきの「XMLパーサーの解析結果」 と似た用法ですね
57.
利用例: LLVMの "StringRef" がある箇所 •(おそらく) メソッド名等を保持する部分 (完全に読めているわけではなくて、 コード中にStringRefが見つかった場所 近辺を読んだだけですが、そんな雰囲気 だった)
58.
string_refを標準化しようという 提案文書(N3442)にて 利用を想定していたケース (1/3)
59.
引数の型はstd::stringであるが、 「std::string以外の値を引数として 渡す場合」は呼び出す側でコピーを 取っておく必要がある場合
60.
string_refを標準化しようという 提案文書(N3442)にて 利用を想定していたケース (2/3)
61.
char*ポインタと文字列長を 組にした引数を受け取っているような 箇所の置き換え •パフォーマンスを理由にそうする ことを想定? •内部的にC言語のAPIを呼ぶ場合 とか?
62.
string_refを標準化しようという 提案文書(N3442)にて 利用を想定していたケース (3/3)
63.
•連続したメモリ上に確保されている ものであれば何でも扱える、という 型が必要な場合 std::stringもstd::vector<char>も 統一的に扱いたいとか?
64.
部分文字列を 取る操作が あるならば、 これが使えないか 考えてみよう
65.
といえるくらい 汎用的な ライブラリです
66.
おわりに
67.
部分文字列を 取るときに 付きまとう問題 「余計なメモリ確保」 B o o
s t C + + L i b r a r y C + +
68.
それをスマートに 解決してくれる string_view
69.
祝・ 標準化が有力に!
70.
参考資料 C++標準化提案 • N3442(string_refの提案) http://www.open-std.org/jtc1/sc22/wg21/docs/ papers/2012/n3442.html • N4606(C++1zのドラフト) http://www.open-std.org/JTC1/SC22/WG21/docs/ papers/2016/n4606.pdf 実装(本資料中で示したもの関連) •
Boost http://www.boost.org/ • Qt https://www.qt.io/ • LLVM http://www.llvm.org/
71.
ありがとう ございました
Download