Enviar búsqueda
Cargar
C++のSTLの基本:C++をもっと楽に書くために @ ふわっふわ勉強会(2015.3.14)
•
0 recomendaciones
•
11,301 vistas
Hiro H.
Seguir
ふわっふわ勉強会(2015.3.14) http://connpass.com/event/11403/ での発表内容です。
Leer menos
Leer más
Tecnología
Denunciar
Compartir
Denunciar
Compartir
1 de 54
Descargar ahora
Descargar para leer sin conexión
Recomendados
Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
Shintarou Okada
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門
natrium11321
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.
Recomendados
Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
Shintarou Okada
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門
natrium11321
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.
C++のライブラリを簡単に眺めてみよう
C++のライブラリを簡単に眺めてみよう
Hiro H.
デレステの劇場で登場したアイドルの回数の統計取ってます
デレステの劇場で登場したアイドルの回数の統計取ってます
Hiro H.
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Hiro H.
名古屋市営地下鉄最小距離完乗
名古屋市営地下鉄最小距離完乗
Hiro H.
MSYS2使いはじめました
MSYS2使いはじめました
Hiro H.
関数の最小値を求めることから機械学習へ
関数の最小値を求めることから機械学習へ
Hiro H.
角錐や円錐が、角柱や円柱の体積の3分の1であることを積分・極限抜きで証明してみる
角錐や円錐が、角柱や円柱の体積の3分の1であることを積分・極限抜きで証明してみる
Hiro H.
rsyncで差分バックアップしようぜ!
rsyncで差分バックアップしようぜ!
Hiro H.
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】
Hiro H.
STLの型の使い分け(ダイジェスト版) @ Sapporo.cpp 第7回勉強会 (2014.10.18)
STLの型の使い分け(ダイジェスト版) @ Sapporo.cpp 第7回勉強会 (2014.10.18)
Hiro H.
C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)
C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)
Hiro H.
コンピュータに「最長しりとり」「最短距離でのJR線全線乗り尽くし」を解いてもらった方法
コンピュータに「最長しりとり」「最短距離でのJR線全線乗り尽くし」を解いてもらった方法
Hiro H.
Más contenido relacionado
Más de 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.
C++のライブラリを簡単に眺めてみよう
C++のライブラリを簡単に眺めてみよう
Hiro H.
デレステの劇場で登場したアイドルの回数の統計取ってます
デレステの劇場で登場したアイドルの回数の統計取ってます
Hiro H.
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Hiro H.
名古屋市営地下鉄最小距離完乗
名古屋市営地下鉄最小距離完乗
Hiro H.
MSYS2使いはじめました
MSYS2使いはじめました
Hiro H.
関数の最小値を求めることから機械学習へ
関数の最小値を求めることから機械学習へ
Hiro H.
角錐や円錐が、角柱や円柱の体積の3分の1であることを積分・極限抜きで証明してみる
角錐や円錐が、角柱や円柱の体積の3分の1であることを積分・極限抜きで証明してみる
Hiro H.
rsyncで差分バックアップしようぜ!
rsyncで差分バックアップしようぜ!
Hiro H.
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】
Hiro H.
STLの型の使い分け(ダイジェスト版) @ Sapporo.cpp 第7回勉強会 (2014.10.18)
STLの型の使い分け(ダイジェスト版) @ Sapporo.cpp 第7回勉強会 (2014.10.18)
Hiro H.
C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)
C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)
Hiro H.
コンピュータに「最長しりとり」「最短距離でのJR線全線乗り尽くし」を解いてもらった方法
コンピュータに「最長しりとり」「最短距離でのJR線全線乗り尽くし」を解いてもらった方法
Hiro H.
Más de Hiro H.
(20)
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にて複数のコマンドを並列実行(同時実行数の制限付き)
最近デレステ創作譜面作ってるので技術的な見地から話します
最近デレステ創作譜面作ってるので技術的な見地から話します
C++のライブラリを簡単に眺めてみよう
C++のライブラリを簡単に眺めてみよう
デレステの劇場で登場したアイドルの回数の統計取ってます
デレステの劇場で登場したアイドルの回数の統計取ってます
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
名古屋市営地下鉄最小距離完乗
名古屋市営地下鉄最小距離完乗
MSYS2使いはじめました
MSYS2使いはじめました
関数の最小値を求めることから機械学習へ
関数の最小値を求めることから機械学習へ
角錐や円錐が、角柱や円柱の体積の3分の1であることを積分・極限抜きで証明してみる
角錐や円錐が、角柱や円柱の体積の3分の1であることを積分・極限抜きで証明してみる
rsyncで差分バックアップしようぜ!
rsyncで差分バックアップしようぜ!
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】
STLの型の使い分け(ダイジェスト版) @ Sapporo.cpp 第7回勉強会 (2014.10.18)
STLの型の使い分け(ダイジェスト版) @ Sapporo.cpp 第7回勉強会 (2014.10.18)
C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)
C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)
コンピュータに「最長しりとり」「最短距離でのJR線全線乗り尽くし」を解いてもらった方法
コンピュータに「最長しりとり」「最短距離でのJR線全線乗り尽くし」を解いてもらった方法
C++のSTLの基本:C++をもっと楽に書くために @ ふわっふわ勉強会(2015.3.14)
1.
ふわっふわ勉強会(2015.3.14) C++のSTLの基本: C++をもっと 楽に書くために H.Hiro Twitter: @h_hiro_ http://hhiro.net/about/
2.
自己紹介
3.
H.Hiro ●情報系の研究員 やってます (アルゴリズムを作ったり するのが仕事です) ●趣味でもプログラム書いてます ●4月から名古屋に引っ越します (別の仕事が決まりました)
4.
よろしく お願いします
5.
今回話す内容
6.
C++の STL
7.
STL (Standard Template Library)
8.
想定する 聴講者層
9.
● STL使い始めたばかり ● C++は書いてはいるが Better
Cとしてしか使えてない ● C++はそこまで慣れてないけど 他にある程度使い込んでる プログラム言語がある
10.
● STL使い始めたばかり ● C++は書いてはいるが Better
Cとしてしか使えてない ● C++はそこまで慣れてないけど 他にある程度使い込んでる プログラム言語がある もっと楽に 書くための一助に! C++の記法って 面倒?そんなことないよ std::max_elementとか std::sortとか使ってる?
11.
さて、今回は
12.
STLの 形式ばった説明 は極力しない
13.
利用例から 紹介していく
14.
#include <iostream> #include <string> #include
<vector> void display_party(std::vector<std::string> & party){ std::cout << "[現在のパーティー]" << std::endl; for(auto i = party.begin(); i != party.end(); ++i){ std::cout << *i << std::endl; } } int main(void){ std::vector<std::string> current_party; current_party.push_back("勇者"); current_party.push_back("魔法使い"); current_party.push_back("遊び人"); display_party(current_party); }
15.
#include <iostream> #include <string> #include
<vector> void display_party(std::vector<std::string> & party){ std::cout << "[現在のパーティー]" << std::endl; for(auto i = party.begin(); i != party.end(); ++i){ std::cout << *i << std::endl; } } int main(void){ std::vector<std::string> current_party; current_party.push_back("勇者"); current_party.push_back("魔法使い"); current_party.push_back("遊び人"); display_party(current_party); current_party.erase(current_party.begin()); display_party(current_party); }
16.
何のことはない
17.
配列を操作 しているだけ
18.
// 文字列型の配列を定義する // 「大きな枠組み<各個の要素>」と読む std::vector<std::string>
current_party; // 配列に実際に文字列を追加する current_party.push_back("勇者"); // 配列の先頭を削除する current_party.erase(current_party.begin());
19.
ただ、 これだけでは 終わらない
20.
#include <iostream> #include <string> #include
<vector> struct Person{ std::string job; int level; }; void display_party(std::vector<Person> & party){ std::cout << "[現在のパーティー]" << std::endl; for(auto i = party.begin(); i != party.end(); ++i){ std::cout << i->job << "(Lv:" << i->level << ")" << std::endl; } } int main(void){ std::vector<Person> current_party; current_party.push_back({"勇者", 30}); current_party.push_back({"魔法使い", 25}); current_party.push_back({"遊び人", 20}); display_party(current_party); }
21.
好きな型で 使うことができる (なお、いくつか条件はあり) std::vector<std::string> std::vector<int> std::vector<Person> :
22.
#include <iostream> #include <string> #include
<map> int main(void){ std::map<std::string, std::string> member_location; member_location["ろっさむ"] = "札幌"; member_location["ほっと"] = "札幌"; member_location["筒天"] = "札幌"; member_location["nawoyuki"] = "札幌"; member_location["睦月"] = "札幌"; member_location["H.Hiro"] = "札幌"; for(auto i = member_location.begin(); i != member_location.end(); ++i){ std::cout << i->first << ": " << i->second << " から来ました" << std::endl; } }
23.
連想配列など 他の構造も ある
24.
#include <iostream> #include <string> #include
<vector> #include <algorithm> struct Person{ std::string job; int level; }; void display_party(std::vector<Person> & party){ (略) } int main(void){ std::vector<Person> current_party; current_party.push_back({"勇者", 30}); current_party.push_back({"魔法使い", 25}); current_party.push_back({"遊び人", 20}); std::sort(current_party.begin(), current_party.end(), [](const Person & a, const Person & b){ return a.level < b.level; }); display_party(current_party); }
25.
検索や 並べ替えなどの 処理もできる
26.
スクリプト言語だと 普通の機能かもしれないけど C++でもちゃんと使えるよ! だからみんなもっと C++使うといいと思うよ!
27.
もう少し 詳しく紹介
28.
STLの構成要素
29.
●コンテナ ●イテレータ ●アルゴリズム ●関数オブジェクト
30.
●コンテナ ●イテレータ ●アルゴリズム ●関数オブジェクト おそらく、 上段ほど よく使われ ている
31.
コンテナ: 値を格納するためのtemplate型 ※「コンテナアダプタ」というものもあるけど今回は省略 std::vector<型名> std::map<型名, 型名> : これはよく利用される
32.
イテレータ: 「繰り返し」「前(後)の要素」 などの処理を抽象化したもの for(auto i =
party.begin(); i != party.end(); ++i){ std::cout << *i << std::endl; } どのコンテナでも記法は基本的に 同じ
33.
アルゴリズム: 「並べ替え」「最大値取得」 など、複数の値に対する処理 std::sort(party.begin(), party.end(), [](const Person
& a, const Person & b){ return a.level < b.level; // レベルの値が低い順に並べ替え }); イテレータのおかげで、どのコンテナに 対しても共通で利用できる!
34.
関数オブジェクト: 「関数」を引数として渡したい ときのための機構 std::sort(party.begin(), party.end(), [](const Person
& a, const Person & b){ return a.level < b.level; // レベルの値が高い順に並べ替え }); その場その場で 自由に処理を差し替えられる
35.
関数オブジェクト: 「関数」を引数として渡したい ときのための機構 std::sort(party.begin(), party.end(), [](const Person
& a, const Person & b){ return a.job < b.job; // 職業名の順に並べ替え }); その場その場で 自由に処理を差し替えられる
36.
「コンテナ」「イテレータ」は 使ってる人は多そうだが 「アルゴリズム」 「関数オブジェクト」 も使ってみよう!
37.
さて、私が思うに
38.
「コンテナ」「イテレータ」は ともかく 「アルゴリズム」 「関数オブジェクト」は 以前は記法が面倒だった
39.
ということで
40.
このあたりで 歴史的な話を しておきたい
41.
以前は記法が 面倒だったけど 今なら大丈夫! という点を 紹介しておきたい
42.
C++11
43.
C++11 ● 現最新規格(C++14)の一つ前 ● さらにその前の規格(C++03) から大幅に機能を追加 ●
現在はコンパイラも かなり対応が進んでいる
44.
C++11が使えるように なって、STL利用の 利便性も大幅に向上
45.
1. コンテナ 初期化の記法が導入され、 リテラルに近い感覚で 利用できるようになった <従来> std::vector<int> hoge; hoge.push_back(9);
hoge.push_back(1); hoge.push_back(3); <C++11> std::vector<int> hoge = {9, 1, 3};
46.
「連想配列のリテラル」も 書けるようになった <従来> std::map<int, int> piyo; piyo[3]
= 6; piyo[5] = 1; piyo[8] = 9; <C++11> std::map<int, int> piyo = {{3, 6}, {5, 1}, {8, 9}};
47.
2. イテレータ ● auto記法が導入 ●
その関係で、constイテレータを 明示的に得る方法が新設された <従来> for(std::vector<int>::const_iterator it = hoge.begin(); it != hoge.end(); ++it){ ... } <C++11> for(auto it = hoge.cbegin(); it != hoge.cend(); ++it){ ... }
48.
3. アルゴリズム/ 4. 関数オブジェクト ●
無名関数で非常に便利に <従来> struct SortByLevel{ int operator()(const Person & a, const Person & b){ return a.level < b.level; } }; std::sort(party.begin(), party.end(), SortByLevel()); <C++11> std::sort(party.begin(), party.end(), [](const Person & a, const Person & b){ return a.level < b.level; });
49.
C++11対応コンパイラを 前提にコードを書けば 記法が非常に すっきりする
50.
おわりに
51.
C++使ってて STLを使ってないなら まずは使ってみよう
52.
STLを使ってても アルゴリズムや 関数オブジェクトを 使ってないなら 使ってみよう
53.
今なら、C++11が 普通に使える環境も 増えてる =記法も楽ですよ
54.
ありがとう ございました
Descargar ahora