Enviar búsqueda
Cargar
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
•
5 recomendaciones
•
8,949 vistas
Hiro H.
Seguir
C++1zに導入される見込みの高くなったライブラリ string_view についてお話しします。
Leer menos
Leer más
Tecnología
Vista de diapositivas
Denunciar
Compartir
Vista de diapositivas
Denunciar
Compartir
1 de 71
Descargar ahora
Descargar para leer sin conexión
Recomendados
中3女子でもわかる constexpr
中3女子でもわかる constexpr
Genya Murakami
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
Genya Murakami
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
Ryo Suzuki
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
Kohsuke Yuasa
unique_ptrにポインタ以外のものを持たせるとき
unique_ptrにポインタ以外のものを持たせるとき
Shintarou Okada
Constexpr 中3女子テクニック
Constexpr 中3女子テクニック
Genya Murakami
並列化による高速化
並列化による高速化
sakura-mike
templateとautoの型推論
templateとautoの型推論
MITSUNARI Shigeo
Recomendados
中3女子でもわかる constexpr
中3女子でもわかる constexpr
Genya Murakami
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
Genya Murakami
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
Ryo Suzuki
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
Kohsuke Yuasa
unique_ptrにポインタ以外のものを持たせるとき
unique_ptrにポインタ以外のものを持たせるとき
Shintarou Okada
Constexpr 中3女子テクニック
Constexpr 中3女子テクニック
Genya Murakami
並列化による高速化
並列化による高速化
sakura-mike
templateとautoの型推論
templateとautoの型推論
MITSUNARI Shigeo
C++ マルチスレッド 入門
C++ マルチスレッド 入門
京大 マイコンクラブ
新しい並列for構文のご提案
新しい並列for構文のご提案
yohhoy
LLVM最適化のこつ
LLVM最適化のこつ
MITSUNARI Shigeo
PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介
PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介
T. Suwa
C#で速度を極めるいろは
C#で速度を極めるいろは
Core Concept Technologies
圏論のモナドとHaskellのモナド
圏論のモナドとHaskellのモナド
Yoshihiro Mizoguchi
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
yohhoy
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法
Takuya Akiba
冬のLock free祭り safe
冬のLock free祭り safe
Kumazaki Hiroki
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
Hideyuki Tanaka
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
Yoshifumi Kawai
カスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについて
alwei
プログラムを高速化する話
プログラムを高速化する話
京大 マイコンクラブ
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
Norishige Fukushima
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ
digitalghost
F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~
Nobuhisa Koizumi
12 分くらいで知るLuaVM
12 分くらいで知るLuaVM
Yuki Tamura
非同期処理の基礎
非同期処理の基礎
信之 岩永
最新C++事情 C++14-C++20 (2018年10月)
最新C++事情 C++14-C++20 (2018年10月)
Akihiko Matuura
暗号技術の実装と数学
暗号技術の実装と数学
MITSUNARI Shigeo
Boost Tour 1_58_0 merge
Boost Tour 1_58_0 merge
Akira Takahashi
Study3 boost
Study3 boost
Kohsuke Yuasa
Más contenido relacionado
La actualidad más candente
C++ マルチスレッド 入門
C++ マルチスレッド 入門
京大 マイコンクラブ
新しい並列for構文のご提案
新しい並列for構文のご提案
yohhoy
LLVM最適化のこつ
LLVM最適化のこつ
MITSUNARI Shigeo
PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介
PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介
T. Suwa
C#で速度を極めるいろは
C#で速度を極めるいろは
Core Concept Technologies
圏論のモナドとHaskellのモナド
圏論のモナドとHaskellのモナド
Yoshihiro Mizoguchi
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
yohhoy
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法
Takuya Akiba
冬のLock free祭り safe
冬のLock free祭り safe
Kumazaki Hiroki
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
Hideyuki Tanaka
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
Yoshifumi Kawai
カスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについて
alwei
プログラムを高速化する話
プログラムを高速化する話
京大 マイコンクラブ
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
Norishige Fukushima
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ
digitalghost
F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~
Nobuhisa Koizumi
12 分くらいで知るLuaVM
12 分くらいで知るLuaVM
Yuki Tamura
非同期処理の基礎
非同期処理の基礎
信之 岩永
最新C++事情 C++14-C++20 (2018年10月)
最新C++事情 C++14-C++20 (2018年10月)
Akihiko Matuura
暗号技術の実装と数学
暗号技術の実装と数学
MITSUNARI Shigeo
La actualidad más candente
(20)
C++ マルチスレッド 入門
C++ マルチスレッド 入門
新しい並列for構文のご提案
新しい並列for構文のご提案
LLVM最適化のこつ
LLVM最適化のこつ
PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介
PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介
C#で速度を極めるいろは
C#で速度を極めるいろは
圏論のモナドとHaskellのモナド
圏論のモナドとHaskellのモナド
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法
冬のLock free祭り safe
冬のLock free祭り safe
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
カスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについて
プログラムを高速化する話
プログラムを高速化する話
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ
F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~
12 分くらいで知るLuaVM
12 分くらいで知るLuaVM
非同期処理の基礎
非同期処理の基礎
最新C++事情 C++14-C++20 (2018年10月)
最新C++事情 C++14-C++20 (2018年10月)
暗号技術の実装と数学
暗号技術の実装と数学
Similar a Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Boost Tour 1_58_0 merge
Boost Tour 1_58_0 merge
Akira Takahashi
Study3 boost
Study3 boost
Kohsuke Yuasa
Boost Tour 1.50.0
Boost Tour 1.50.0
Akira Takahashi
Boost tour 1.60.0 merge
Boost tour 1.60.0 merge
Akira Takahashi
Boost.Flyweight
Boost.Flyweight
gintenlabo
Impractical Introduction of Boost Spirit Qi [PPT]
Impractical Introduction of Boost Spirit Qi [PPT]
yak1ex
SystemC Tutorial
SystemC Tutorial
kocha2012
STLの型の使い分け(ダイジェスト版) @ Sapporo.cpp 第7回勉強会 (2014.10.18)
STLの型の使い分け(ダイジェスト版) @ Sapporo.cpp 第7回勉強会 (2014.10.18)
Hiro H.
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」
Hiro H.
C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)
C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)
Hiro H.
C++のライブラリを簡単に眺めてみよう
C++のライブラリを簡単に眺めてみよう
Hiro H.
Boost jp9 program_options
Boost jp9 program_options
nyaocat
Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7
Preferred Networks
.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#
信之 岩永
2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」
2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」
Hiro H.
Boost Tour 1.53.0 merge
Boost Tour 1.53.0 merge
Akira Takahashi
Objc lambda
Objc lambda
matuura_core
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Masahiro Wakame
effective modern c++ chapeter36
effective modern c++ chapeter36
Tatsuki SHIMIZU
Hupc 1
Hupc 1
Hiroki Takeda
Similar a Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
(20)
Boost Tour 1_58_0 merge
Boost Tour 1_58_0 merge
Study3 boost
Study3 boost
Boost Tour 1.50.0
Boost Tour 1.50.0
Boost tour 1.60.0 merge
Boost tour 1.60.0 merge
Boost.Flyweight
Boost.Flyweight
Impractical Introduction of Boost Spirit Qi [PPT]
Impractical Introduction of Boost Spirit Qi [PPT]
SystemC Tutorial
SystemC Tutorial
STLの型の使い分け(ダイジェスト版) @ Sapporo.cpp 第7回勉強会 (2014.10.18)
STLの型の使い分け(ダイジェスト版) @ Sapporo.cpp 第7回勉強会 (2014.10.18)
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」
C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)
C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)
C++のライブラリを簡単に眺めてみよう
C++のライブラリを簡単に眺めてみよう
Boost jp9 program_options
Boost jp9 program_options
Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7
.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#
2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」
2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」
Boost Tour 1.53.0 merge
Boost Tour 1.53.0 merge
Objc lambda
Objc lambda
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
effective modern c++ chapeter36
effective modern c++ chapeter36
Hupc 1
Hupc 1
Más de Hiro H.
pandas便利だけどデフォルトパラメータでファイルを読み込むな!
pandas便利だけどデフォルトパラメータでファイルを読み込むな!
Hiro H.
式を書くだけで最適化計算してほしい!~CVXPY編~
式を書くだけで最適化計算してほしい!~CVXPY編~
Hiro H.
旅行「#重複乗車禁止で名鉄完乗」とその数学的な解説
旅行「#重複乗車禁止で名鉄完乗」とその数学的な解説
Hiro H.
シンデレラガール総選挙の「50位圏内の難しさ」はいかほどか?(23:20更新)
シンデレラガール総選挙の「50位圏内の難しさ」はいかほどか?(23:20更新)
Hiro H.
「MVが3人な曲の一覧」って取得できます?(デレステ・ミリシタ・エムステ)
「MVが3人な曲の一覧」って取得できます?(デレステ・ミリシタ・エムステ)
Hiro H.
配列の要素挿入・削除もランダムアクセスも両方高速にできる?
配列の要素挿入・削除もランダムアクセスも両方高速にできる?
Hiro H.
PCSじゃないよ、PCAだよ
PCSじゃないよ、PCAだよ
Hiro H.
声優やぞ!~シンデレラガールズにおける配役の歴史のRDFデータ化~
声優やぞ!~シンデレラガールズにおける配役の歴史のRDFデータ化~
Hiro H.
スマホ音楽ゲームの動画から譜面をデータ化したかった
スマホ音楽ゲームの動画から譜面をデータ化したかった
Hiro H.
シンデレラガールズ声優の増え方まとめ
シンデレラガールズ声優の増え方まとめ
Hiro H.
札幌C++勉強会 #13「最近、仕事でC++11以降の新規格が役に立ったシーン紹介」
札幌C++勉強会 #13「最近、仕事でC++11以降の新規格が役に立ったシーン紹介」
Hiro H.
わんくま同盟 名古屋勉強会 #43 ライトニングトーク「Firefoxがver.57~(Quantum)にアップグレードされて困ったこと・やったこと」
わんくま同盟 名古屋勉強会 #43 ライトニングトーク「Firefoxがver.57~(Quantum)にアップグレードされて困ったこと・やったこと」
Hiro H.
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Hiro H.
最近デレステ創作譜面作ってるので技術的な見地から話します
最近デレステ創作譜面作ってるので技術的な見地から話します
Hiro H.
デレステの劇場で登場したアイドルの回数の統計取ってます
デレステの劇場で登場したアイドルの回数の統計取ってます
Hiro H.
名古屋市営地下鉄最小距離完乗
名古屋市営地下鉄最小距離完乗
Hiro H.
MSYS2使いはじめました
MSYS2使いはじめました
Hiro H.
関数の最小値を求めることから機械学習へ
関数の最小値を求めることから機械学習へ
Hiro H.
角錐や円錐が、角柱や円柱の体積の3分の1であることを積分・極限抜きで証明してみる
角錐や円錐が、角柱や円柱の体積の3分の1であることを積分・極限抜きで証明してみる
Hiro H.
rsyncで差分バックアップしようぜ!
rsyncで差分バックアップしようぜ!
Hiro H.
Más de Hiro H.
(20)
pandas便利だけどデフォルトパラメータでファイルを読み込むな!
pandas便利だけどデフォルトパラメータでファイルを読み込むな!
式を書くだけで最適化計算してほしい!~CVXPY編~
式を書くだけで最適化計算してほしい!~CVXPY編~
旅行「#重複乗車禁止で名鉄完乗」とその数学的な解説
旅行「#重複乗車禁止で名鉄完乗」とその数学的な解説
シンデレラガール総選挙の「50位圏内の難しさ」はいかほどか?(23:20更新)
シンデレラガール総選挙の「50位圏内の難しさ」はいかほどか?(23:20更新)
「MVが3人な曲の一覧」って取得できます?(デレステ・ミリシタ・エムステ)
「MVが3人な曲の一覧」って取得できます?(デレステ・ミリシタ・エムステ)
配列の要素挿入・削除もランダムアクセスも両方高速にできる?
配列の要素挿入・削除もランダムアクセスも両方高速にできる?
PCSじゃないよ、PCAだよ
PCSじゃないよ、PCAだよ
声優やぞ!~シンデレラガールズにおける配役の歴史のRDFデータ化~
声優やぞ!~シンデレラガールズにおける配役の歴史のRDFデータ化~
スマホ音楽ゲームの動画から譜面をデータ化したかった
スマホ音楽ゲームの動画から譜面をデータ化したかった
シンデレラガールズ声優の増え方まとめ
シンデレラガールズ声優の増え方まとめ
札幌C++勉強会 #13「最近、仕事でC++11以降の新規格が役に立ったシーン紹介」
札幌C++勉強会 #13「最近、仕事でC++11以降の新規格が役に立ったシーン紹介」
わんくま同盟 名古屋勉強会 #43 ライトニングトーク「Firefoxがver.57~(Quantum)にアップグレードされて困ったこと・やったこと」
わんくま同盟 名古屋勉強会 #43 ライトニングトーク「Firefoxがver.57~(Quantum)にアップグレードされて困ったこと・やったこと」
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
最近デレステ創作譜面作ってるので技術的な見地から話します
最近デレステ創作譜面作ってるので技術的な見地から話します
デレステの劇場で登場したアイドルの回数の統計取ってます
デレステの劇場で登場したアイドルの回数の統計取ってます
名古屋市営地下鉄最小距離完乗
名古屋市営地下鉄最小距離完乗
MSYS2使いはじめました
MSYS2使いはじめました
関数の最小値を求めることから機械学習へ
関数の最小値を求めることから機械学習へ
角錐や円錐が、角柱や円柱の体積の3分の1であることを積分・極限抜きで証明してみる
角錐や円錐が、角柱や円柱の体積の3分の1であることを積分・極限抜きで証明してみる
rsyncで差分バックアップしようぜ!
rsyncで差分バックアップしようぜ!
Último
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
sugiuralab
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
iPride Co., Ltd.
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
Toru Tamaki
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
Hiroki Ichikura
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
taisei2219
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Yuma Ohgami
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
Toru Tamaki
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
Toru Tamaki
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
Ryo Sasaki
Último
(9)
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
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)を 反映させているようです
28.
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.
ありがとう ございました
Descargar ahora