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.
3,555 views
STLの型の使い分け(ダイジェスト版) @ Sapporo.cpp 第7回勉強会 (2014.10.18)
C++におけるSTLの型の使い分けについて書いた記事(http://qiita.com/h_hiro_/items/a83a8fd2391d4a3f0e1c)をダイジェストで解説するものです。
Technology
◦
Read more
3
Save
Share
Embed
Embed presentation
Download
Downloaded 23 times
1
/ 37
2
/ 37
3
/ 37
4
/ 37
5
/ 37
6
/ 37
7
/ 37
8
/ 37
9
/ 37
10
/ 37
11
/ 37
12
/ 37
13
/ 37
14
/ 37
15
/ 37
16
/ 37
17
/ 37
18
/ 37
19
/ 37
20
/ 37
21
/ 37
22
/ 37
23
/ 37
24
/ 37
25
/ 37
26
/ 37
27
/ 37
28
/ 37
29
/ 37
30
/ 37
31
/ 37
32
/ 37
33
/ 37
34
/ 37
35
/ 37
36
/ 37
37
/ 37
More Related Content
PDF
C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)
by
Hiro H.
PDF
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
by
Hiro H.
PDF
C++のライブラリを簡単に眺めてみよう
by
Hiro H.
PDF
C++コミュニティーの中心でC++をDISる
by
Hideyuki Tanaka
PDF
関数の最小値を求めることから機械学習へ
by
Hiro H.
PDF
Gensim
by
saireya _
PDF
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」
by
Hiro H.
PDF
2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」
by
Hiro H.
C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)
by
Hiro H.
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
by
Hiro H.
C++のライブラリを簡単に眺めてみよう
by
Hiro H.
C++コミュニティーの中心でC++をDISる
by
Hideyuki Tanaka
関数の最小値を求めることから機械学習へ
by
Hiro H.
Gensim
by
saireya _
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」
by
Hiro H.
2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」
by
Hiro H.
What's hot
PDF
Pfi Seminar 2010 1 7
by
Preferred Networks
PDF
C++ ポインタ ブートキャンプ
by
Kohsuke Yuasa
PDF
リテラル文字列型までの道
by
Satoshi Sato
PDF
Python 機械学習プログラミング データ分析ライブラリー解説編
by
Etsuji Nakai
PDF
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
by
kiki utagawa
PDF
Constexprとtemplateでコンパイル時にfizz buzz
by
京大 マイコンクラブ
PDF
Boost tour 1.60.0 merge
by
Akira Takahashi
PDF
constexpr idioms
by
fimbul
PDF
闇魔術を触ってみた
by
Satoshi Sato
PDF
中3女子が狂える本当に気持ちのいい constexpr
by
Genya Murakami
PDF
Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)
by
Google Developer Relations Team
KEY
core dumpでcode golf
by
Nomura Yusuke
PDF
F#入門 ~関数プログラミングとは何か~
by
Nobuhisa Koizumi
PPTX
Map
by
kikairoya
PDF
2012.11.17 CLR/H&札幌C++勉強会 発表資料「部分文字列の取得を効率よく!楽に! - fundoshi.hppの紹介と今後の予定 -」
by
Hiro H.
PDF
これからの「言語」の話をしよう ―― 未来を生きるためのツール
by
Nobuhisa Koizumi
PDF
boost::shared_ptr tutorial
by
NU_Pan
PPTX
Unique ptr の紹介
by
Daisuke Nikura
PDF
C++ Template Meta Programming の紹介@社内勉強会
by
Akihiko Matuura
PDF
Pythonデータ分析 第3回勉強会資料 8章
by
Makoto Kawano
Pfi Seminar 2010 1 7
by
Preferred Networks
C++ ポインタ ブートキャンプ
by
Kohsuke Yuasa
リテラル文字列型までの道
by
Satoshi Sato
Python 機械学習プログラミング データ分析ライブラリー解説編
by
Etsuji Nakai
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
by
kiki utagawa
Constexprとtemplateでコンパイル時にfizz buzz
by
京大 マイコンクラブ
Boost tour 1.60.0 merge
by
Akira Takahashi
constexpr idioms
by
fimbul
闇魔術を触ってみた
by
Satoshi Sato
中3女子が狂える本当に気持ちのいい constexpr
by
Genya Murakami
Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)
by
Google Developer Relations Team
core dumpでcode golf
by
Nomura Yusuke
F#入門 ~関数プログラミングとは何か~
by
Nobuhisa Koizumi
Map
by
kikairoya
2012.11.17 CLR/H&札幌C++勉強会 発表資料「部分文字列の取得を効率よく!楽に! - fundoshi.hppの紹介と今後の予定 -」
by
Hiro H.
これからの「言語」の話をしよう ―― 未来を生きるためのツール
by
Nobuhisa Koizumi
boost::shared_ptr tutorial
by
NU_Pan
Unique ptr の紹介
by
Daisuke Nikura
C++ Template Meta Programming の紹介@社内勉強会
by
Akihiko Matuura
Pythonデータ分析 第3回勉強会資料 8章
by
Makoto Kawano
Similar to STLの型の使い分け(ダイジェスト版) @ Sapporo.cpp 第7回勉強会 (2014.10.18)
PDF
中3女子でもわかる constexpr
by
Genya Murakami
PDF
ゲーム開発者のための C++11/C++14
by
Ryo Suzuki
PDF
Boost.Flyweight
by
gintenlabo
PDF
C++によるソート入門
by
AimingStudy
PDF
すごいHaskell楽しく学ぼう 第6章
by
aomori ringo
PPTX
b木ノススメ
by
gotoloop
PDF
研究生のためのC++ no.5
by
Tomohiro Namba
PDF
初めてのSTL
by
HCPC: 北海道大学競技プログラミングサークル
PDF
すごいHaskell読書会#1 in 大阪
by
yashigani
PDF
すごいHaskell読書会
by
Kosuke Usami
PDF
Boost.PropertyMap (.pdf)
by
Cryolite
PPTX
Boost.PropertyMap (.pptx)
by
Cryolite
中3女子でもわかる constexpr
by
Genya Murakami
ゲーム開発者のための C++11/C++14
by
Ryo Suzuki
Boost.Flyweight
by
gintenlabo
C++によるソート入門
by
AimingStudy
すごいHaskell楽しく学ぼう 第6章
by
aomori ringo
b木ノススメ
by
gotoloop
研究生のためのC++ no.5
by
Tomohiro Namba
初めてのSTL
by
HCPC: 北海道大学競技プログラミングサークル
すごいHaskell読書会#1 in 大阪
by
yashigani
すごいHaskell読書会
by
Kosuke Usami
Boost.PropertyMap (.pdf)
by
Cryolite
Boost.PropertyMap (.pptx)
by
Cryolite
More from Hiro H.
PDF
式を書くだけで最適化計算してほしい!~CVXPY編~
by
Hiro H.
PDF
旅行「#重複乗車禁止で名鉄完乗」とその数学的な解説
by
Hiro H.
PDF
rsyncで差分バックアップしようぜ!
by
Hiro H.
PDF
pandas便利だけどデフォルトパラメータでファイルを読み込むな!
by
Hiro H.
PDF
配列の要素挿入・削除もランダムアクセスも両方高速にできる?
by
Hiro H.
PDF
MSYS2使いはじめました
by
Hiro H.
PDF
シンデレラガールズの「シンプルな」カードゲームを作りたい(アイマスハッカソン2024)
by
Hiro H.
PDF
名古屋市営地下鉄最小距離完乗
by
Hiro H.
PDF
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
by
Hiro H.
PDF
スマホ音楽ゲームの動画から譜面をデータ化したかった
by
Hiro H.
PDF
シンデレラガール総選挙の「50位圏内の難しさ」はいかほどか?(23:20更新)
by
Hiro H.
PDF
「MVが3人な曲の一覧」って取得できます?(デレステ・ミリシタ・エムステ)
by
Hiro H.
PDF
PCSじゃないよ、PCAだよ
by
Hiro H.
PDF
デレステの劇場で登場したアイドルの回数の統計取ってます
by
Hiro H.
PDF
最近デレステ創作譜面作ってるので技術的な見地から話します
by
Hiro H.
PDF
角錐や円錐が、角柱や円柱の体積の3分の1であることを積分・極限抜きで証明してみる
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.
式を書くだけで最適化計算してほしい!~CVXPY編~
by
Hiro H.
旅行「#重複乗車禁止で名鉄完乗」とその数学的な解説
by
Hiro H.
rsyncで差分バックアップしようぜ!
by
Hiro H.
pandas便利だけどデフォルトパラメータでファイルを読み込むな!
by
Hiro H.
配列の要素挿入・削除もランダムアクセスも両方高速にできる?
by
Hiro H.
MSYS2使いはじめました
by
Hiro H.
シンデレラガールズの「シンプルな」カードゲームを作りたい(アイマスハッカソン2024)
by
Hiro H.
名古屋市営地下鉄最小距離完乗
by
Hiro H.
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
by
Hiro H.
スマホ音楽ゲームの動画から譜面をデータ化したかった
by
Hiro H.
シンデレラガール総選挙の「50位圏内の難しさ」はいかほどか?(23:20更新)
by
Hiro H.
「MVが3人な曲の一覧」って取得できます?(デレステ・ミリシタ・エムステ)
by
Hiro H.
PCSじゃないよ、PCAだよ
by
Hiro H.
デレステの劇場で登場したアイドルの回数の統計取ってます
by
Hiro H.
最近デレステ創作譜面作ってるので技術的な見地から話します
by
Hiro H.
角錐や円錐が、角柱や円柱の体積の3分の1であることを積分・極限抜きで証明してみる
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.
STLの型の使い分け(ダイジェスト版) @ Sapporo.cpp 第7回勉強会 (2014.10.18)
1.
Sapporo.cpp 第7回勉強会(2014.10.18) STLの型の使い分け
(ダイジェスト版) H.Hiro Twitter: @h_hiro_ http://hhiro.net/about/
2.
自己紹介
3.
H.Hiro ●情報系の研究員 やってます
●趣味でもプログラム書いてます ●最近は研究でも趣味でも 手間のかかるアルゴリズムの 実装をよくやってます
4.
最近の制作物 ●JRなどの路線網を与えて 「最短距離で全線乗り尽くす」
乗り方を求める(C++) blog.livedoor.jp/maraigue/archives/1747895.html 増毛 新十津川 苫小牧 滝川 東室蘭 五稜郭 函館 長万部 森 大沼 中小国 室蘭 追分 沼ノ端 稚内 東釧路 新得 夕張 新夕張 根室 南千歳 新千歳空港 桑園白石 深川 旭川新旭川 富良野 様似 岩見沢
5.
最近の制作物 ●単語一覧から最大単語数の しりとりを求める(Ruby)
chiraura.hhiro.net/shiritori/
6.
よろしく お願いします
7.
今回話す内容
8.
STL の型の使い分け -
qiita http://qiita.com/h_hiro_/ items/a83a8fd2391d4a3f0e1c ●ここに書いてない基本的な考え方+ ここに書いた内容の要点をお話しします ●上記記事は、詳細な使い分けを 実際に検討するために ご利用いただければと思います
9.
今回のテーマ
10.
STL
11.
STLとは ●Standard Template
Libraryの略 ●汎用的、かつ型に依存しない データ構造や処理(アルゴリズム) を提供する
12.
STLとは ●Standard Template
Libraryの略 ●汎用的、かつ型に依存しない データ構造や処理(アルゴリズム) を提供する
13.
Template(テンプレート)とは ●コンパイル時に有効になる クラスや関数に対するパラメータ
●型によらない機能を提供するのが 代表的な用法 template <class TYPE> TYPE max(const TYPE & v1, const TYPE & v2){ return(v1 > v2 ? v1 : v2); } max(1.0, 3.0); // TYPEはfloatとみなされる max(1, 5); // TYPEはintとみなされる max<int>(1, 5); // 型を明示してもよい
14.
STLの例 #include <iostream>
#include <vector> #include <algorithm> int main(void){ // 「intのvector」「doubleのvector」を作る // (あとで説明しますが、可変長配列です) std::vector<int> hoge = {3, 1, 4}; std::vector<double> piyo = {5.6, 1.2, 3.4}; // int/doubleの型によらず、同じ記法でソート(並べ替え)できる std::sort(hoge.begin(), hoge.end()); std::sort(piyo.begin(), piyo.end()); }
15.
STLの例 #include <iostream>
#include <vector> #include <algorithm> int main(void){ // 「intのvector」「doubleのvector」を作る // (あとで説明しますが、可変長配列です) std::vector<int> hoge = {3, 1, 4}; std::vector<double> piyo = {5.6, 1.2, 3.4}; // int/doubleの型によらず、同じ記法でソート(並べ替え)できる std::sort(hoge.begin(), hoge.end()); std::sort(piyo.begin(), piyo.end()); } ※バイト数は 一例です 3 1 4 4バイト4バイト4バイト
16.
STLの例 #include <iostream>
#include <vector> #include <algorithm> int main(void){ // 「intのvector」「doubleのvector」を作る // (あとで説明しますが、可変長配列です) std::vector<int> hoge = {3, 1, 4}; std::vector<double> piyo = {5.6, 1.2, 3.4}; // int/doubleの型によらず、同じ記法でソート(並べ替え)できる std::sort(hoge.begin(), hoge.end()); std::sort(piyo.begin(), piyo.end()); } 5.6 1.2 3.4 8バイト8バイト8バイト
17.
●汎用的に利用されるデータ構造や アルゴリズムを自前で作るのは ミス・バグの原因にもなる
● STLが提供する機能の特性を 理解したうえで、先人の力を借りよう ●複数人で開発するときとかは特に。 (標準ライブラリなので何かと便利!)
18.
●汎用的に利用されるデータ構造や アルゴリズムを自前で作るのは ミス・バグの原因にもなる
● STLが提供する機能の特性を 理解したうえで、先人の力を借りよう ●複数人で開発するときとかは特に。 (標準ライブラリなそのれでもま何たかと便利!) なかなか大変なので 今回解説するわけですが
19.
STLの型
20.
STLでは いろいろな型(クラス) が定義されている
21.
STLの例(再掲) #include <iostream>
#include <vector> #include <algorithm> int main(void){ // 「intのvector」「doubleのvector」を作る // (あとで説明しますが、可変長配列です) std::vector<int> hoge = {3, 1, 4}; std::vector<double> piyo = {5.6, 1.2, 3.4}; // int/doubleの型によらず、同じ記法でソート(並べ替え)できる std::sort(hoge.begin(), hoge.end()); std::sort(piyo.begin(), piyo.end()); } 3 1 4 4バイト4バイト4バイト 5.6 1.2 3.4 8バイト8バイト8バイト
22.
「可変長配列」とか 「連想配列」とか 汎用的なデータ構造が
多数用意されている
23.
ここでは 「可変長配列」を 使ったけど
24.
似た用途で 使える型が STLには他に2つ
存在する
25.
std::vector<int> hoge =
{3, 1, 4}; std::deque<int> hoge = {3, 1, 4}; std::list<int> hoge = {3, 1, 4};
26.
●どれも「要素を指定された 順番に格納する」という 点では共通
●ただし、内部の実装が異なる。 ←得意/不得意な処理が それぞれあるため。
27.
vector: 連続メモリ領域に格納 deque:
固定サイズの 連続メモリ領域を 複数確保して格納 list: ポインタで 繋いで格納 (連結リスト) ⋮ 3 1 4 1 5 … 4バイト4バイト4バイト 4バイト4バイト 3 1 4 1 5 9 Start 3 前次 1 前次 4 前次 End 次前
28.
vector: 連続メモリ領域に格納 →「●番目の要素を得る」(ランダムアクセス)
が高速 (メモリ上のアドレスがすぐに分かる) →メモリ量も少ない(詰めているため) →要素挿入・削除に弱い 0x8720 0x8724 0x8728 0x872C 4バイト4バイト 3 1 4 1 5 0x8730 4バイト4バイト4バイト 後ろ全部を移動の必要あり 3 4 1 5 3 1 4 1 5 …
29.
deque: 固定サイズの連続メモリ領域を 複数確保して格納
→vectorに似るが、 先頭・末尾への挿入・削除には強い ⋮ 3 1 4 1 5 9 3 1 4 1 5 9 2
30.
list: ポインタで繋いで格納 →挿入・削除には途中であっても強い
→ランダムアクセスは低速(順に辿るため) 演算子 "[]" は定義されていない →メモリもvectorなどに比べれば多く必要 要素1つにつきポインタ変数が2つぶん必要 Start 3 前次 1 前次 4 前次 End 次前 5 前次
31.
list: ポインタで繋いで格納 →挿入・削除には途中であっても強い
→ランダムアクセスは低速(順に辿るため) 演算子 "[]" は定義されていない →メモリもvectorなどに比べれば多く必要 要素1つにつきポインタ変数が2つぶん必要 Start 3 前次 1 前次 4 前次 End 次前 5 前次
32.
本当に一長一短
33.
「ランダムアクセス」 「挿入・削除」 両方無条件に有利と
いう型は存在しない ほかに「検索」や「メモリ効率」 などの話もある
34.
"Effective STL"より引用 ●コンテナの任意の位置に新しい要素を
挿入する必要があるか? (あるならlistが有利だが、メモリを食う) ●要素がコンテナ内でどのように並ぶかが 問題となるか? (気にしないなら連想配列が使える) ●どのイテレータが使える必要があるか? (ランダムアクセスの可否など) etc.
35.
どのデータ構造を使うと 高速なのか/メモリ消費が少ないのか 詳しくはこの記事で!(再掲)
STLの型の使い分け - qiita http://qiita.com/h_hiro_/ items/a83a8fd2391d4a3f0e1c
36.
STLの型の 特性を知って より快適な
C++ライフを!
37.
Sapporo.cpp 第7回勉強会(2014.10.18) C++のSTLの
コンテナ型を概観する 終わり
Download