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,074 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
C++ マルチスレッドプログラミング
by
Kohsuke Yuasa
PDF
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
by
Genya Murakami
PDF
ゲーム開発者のための C++11/C++14
by
Ryo Suzuki
PDF
C++ マルチスレッド 入門
by
京大 マイコンクラブ
PDF
20分くらいでわかった気分になれるC++20コルーチン
by
yohhoy
PPTX
画像処理の高性能計算
by
Norishige Fukushima
PPTX
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
by
Game Tools & Middleware Forum
PDF
カスタムメモリマネージャと高速なメモリアロケータについて
by
alwei
C++ マルチスレッドプログラミング
by
Kohsuke Yuasa
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
by
Genya Murakami
ゲーム開発者のための C++11/C++14
by
Ryo Suzuki
C++ マルチスレッド 入門
by
京大 マイコンクラブ
20分くらいでわかった気分になれるC++20コルーチン
by
yohhoy
画像処理の高性能計算
by
Norishige Fukushima
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
by
Game Tools & Middleware Forum
カスタムメモリマネージャと高速なメモリアロケータについて
by
alwei
What's hot
PDF
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
by
Yoshifumi Kawai
PDF
オブジェクト指向できていますか?
by
Moriharu Ohzu
PDF
Constexpr 中3女子テクニック
by
Genya Murakami
PDF
組み込みでこそC++を使う10の理由
by
kikairoya
PDF
不遇の標準ライブラリ - valarray
by
Ryosuke839
PDF
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
by
Unity Technologies Japan K.K.
PPTX
async/await のしくみ
by
信之 岩永
PDF
F#入門 ~関数プログラミングとは何か~
by
Nobuhisa Koizumi
PPTX
非同期処理の基礎
by
信之 岩永
PDF
できる!並列・並行プログラミング
by
Preferred Networks
PDF
C++20 モジュールの概要 / Introduction to C++ modules (part 1)
by
TetsuroMatsumura
PDF
コルーチンでC++でも楽々ゲーム作成!
by
amusementcreators
PDF
シェーダだけで世界を創る!three.jsによるレイマーチング
by
Sho Hosoda
PDF
第2部 自作ライブラリ紹介
by
らりお ザ・何とは言わない天然水ソムリエ
PPTX
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
by
U-dai Yokoyama
PDF
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
by
UnityTechnologiesJapan002
PDF
【Unity道場 2月】シェーダを書けるプログラマになろう
by
Unity Technologies Japan K.K.
PDF
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
by
Unity Technologies Japan K.K.
PPTX
Effective Modern C++ 勉強会 Item 22
by
Keisuke Fukuda
PDF
Python入門 : 4日間コース社内トレーニング
by
Yuichi Ito
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
by
Yoshifumi Kawai
オブジェクト指向できていますか?
by
Moriharu Ohzu
Constexpr 中3女子テクニック
by
Genya Murakami
組み込みでこそC++を使う10の理由
by
kikairoya
不遇の標準ライブラリ - valarray
by
Ryosuke839
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
by
Unity Technologies Japan K.K.
async/await のしくみ
by
信之 岩永
F#入門 ~関数プログラミングとは何か~
by
Nobuhisa Koizumi
非同期処理の基礎
by
信之 岩永
できる!並列・並行プログラミング
by
Preferred Networks
C++20 モジュールの概要 / Introduction to C++ modules (part 1)
by
TetsuroMatsumura
コルーチンでC++でも楽々ゲーム作成!
by
amusementcreators
シェーダだけで世界を創る!three.jsによるレイマーチング
by
Sho Hosoda
第2部 自作ライブラリ紹介
by
らりお ザ・何とは言わない天然水ソムリエ
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
by
U-dai Yokoyama
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
by
UnityTechnologiesJapan002
【Unity道場 2月】シェーダを書けるプログラマになろう
by
Unity Technologies Japan K.K.
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
by
Unity Technologies Japan K.K.
Effective Modern C++ 勉強会 Item 22
by
Keisuke Fukuda
Python入門 : 4日間コース社内トレーニング
by
Yuichi Ito
Similar to Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
PDF
Boost tour 1.60.0 merge
by
Akira Takahashi
PPTX
C++ tips4 cv修飾編
by
道化師 堂華
PDF
Boost Tour 1_58_0 merge
by
Akira Takahashi
PDF
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第5回 ‟配列と構造体„
by
和弘 井之上
PDF
Boost.Flyweight
by
gintenlabo
PPTX
C++0x総復習
by
道化師 堂華
PPTX
Prosym2012
by
MITSUNARI Shigeo
PDF
Hello Dark-Side C# (Part. 1)
by
Yuto Takei
PDF
Boost Tour 1.50.0
by
Akira Takahashi
PDF
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」
by
Hiro H.
PDF
Boost Tour 1.53.0 merge
by
Akira Takahashi
PDF
2012.11.17 CLR/H&札幌C++勉強会 発表資料「部分文字列の取得を効率よく!楽に! - fundoshi.hppの紹介と今後の予定 -」
by
Hiro H.
PDF
Boost tour 1_44_0
by
Akira Takahashi
Boost tour 1.60.0 merge
by
Akira Takahashi
C++ tips4 cv修飾編
by
道化師 堂華
Boost Tour 1_58_0 merge
by
Akira Takahashi
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第5回 ‟配列と構造体„
by
和弘 井之上
Boost.Flyweight
by
gintenlabo
C++0x総復習
by
道化師 堂華
Prosym2012
by
MITSUNARI Shigeo
Hello Dark-Side C# (Part. 1)
by
Yuto Takei
Boost Tour 1.50.0
by
Akira Takahashi
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」
by
Hiro H.
Boost Tour 1.53.0 merge
by
Akira Takahashi
2012.11.17 CLR/H&札幌C++勉強会 発表資料「部分文字列の取得を効率よく!楽に! - fundoshi.hppの紹介と今後の予定 -」
by
Hiro H.
Boost tour 1_44_0
by
Akira Takahashi
More from Hiro H.
PDF
C++のライブラリを簡単に眺めてみよう
by
Hiro H.
PDF
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
by
Hiro H.
PDF
式を書くだけで最適化計算してほしい!~CVXPY編~
by
Hiro H.
PDF
関数の最小値を求めることから機械学習へ
by
Hiro H.
PDF
旅行「#重複乗車禁止で名鉄完乗」とその数学的な解説
by
Hiro H.
PDF
pandas便利だけどデフォルトパラメータでファイルを読み込むな!
by
Hiro H.
PDF
名古屋市営地下鉄最小距離完乗
by
Hiro H.
PDF
MSYS2使いはじめました
by
Hiro H.
PDF
配列の要素挿入・削除もランダムアクセスも両方高速にできる?
by
Hiro H.
PDF
シンデレラガールズの「シンプルな」カードゲームを作りたい(アイマスハッカソン2024)
by
Hiro H.
PDF
PCSじゃないよ、PCAだよ
by
Hiro H.
PDF
「MVが3人な曲の一覧」って取得できます?(デレステ・ミリシタ・エムステ)
by
Hiro H.
PDF
スマホ音楽ゲームの動画から譜面をデータ化したかった
by
Hiro H.
PDF
デレステの劇場で登場したアイドルの回数の統計取ってます
by
Hiro H.
PDF
最近デレステ創作譜面作ってるので技術的な見地から話します
by
Hiro H.
PDF
シンデレラガール総選挙の「50位圏内の難しさ」はいかほどか?(23:20更新)
by
Hiro H.
PDF
札幌C++勉強会 #13「最近、仕事でC++11以降の新規格が役に立ったシーン紹介」
by
Hiro H.
PDF
わんくま同盟 名古屋勉強会 #43 ライトニングトーク「Firefoxがver.57~(Quantum)にアップグレードされて困ったこと・やったこと」
by
Hiro H.
PDF
声優やぞ!~シンデレラガールズにおける配役の歴史のRDFデータ化~
by
Hiro H.
PDF
シンデレラガールズ声優の増え方まとめ
by
Hiro H.
C++のライブラリを簡単に眺めてみよう
by
Hiro H.
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
by
Hiro H.
式を書くだけで最適化計算してほしい!~CVXPY編~
by
Hiro H.
関数の最小値を求めることから機械学習へ
by
Hiro H.
旅行「#重複乗車禁止で名鉄完乗」とその数学的な解説
by
Hiro H.
pandas便利だけどデフォルトパラメータでファイルを読み込むな!
by
Hiro H.
名古屋市営地下鉄最小距離完乗
by
Hiro H.
MSYS2使いはじめました
by
Hiro H.
配列の要素挿入・削除もランダムアクセスも両方高速にできる?
by
Hiro H.
シンデレラガールズの「シンプルな」カードゲームを作りたい(アイマスハッカソン2024)
by
Hiro H.
PCSじゃないよ、PCAだよ
by
Hiro H.
「MVが3人な曲の一覧」って取得できます?(デレステ・ミリシタ・エムステ)
by
Hiro H.
スマホ音楽ゲームの動画から譜面をデータ化したかった
by
Hiro H.
デレステの劇場で登場したアイドルの回数の統計取ってます
by
Hiro H.
最近デレステ創作譜面作ってるので技術的な見地から話します
by
Hiro H.
シンデレラガール総選挙の「50位圏内の難しさ」はいかほどか?(23:20更新)
by
Hiro H.
札幌C++勉強会 #13「最近、仕事でC++11以降の新規格が役に立ったシーン紹介」
by
Hiro H.
わんくま同盟 名古屋勉強会 #43 ライトニングトーク「Firefoxがver.57~(Quantum)にアップグレードされて困ったこと・やったこと」
by
Hiro H.
声優やぞ!~シンデレラガールズにおける配役の歴史のRDFデータ化~
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