SlideShare a Scribd company logo
Sapporo.cpp 第7回勉強会(2014.10.18) 
STLの型の使い分け 
(ダイジェスト版) 
H.Hiro 
Twitter: @h_hiro_ 
http://hhiro.net/about/
自己紹介
H.Hiro 
●情報系の研究員 
やってます 
●趣味でもプログラム書いてます 
●最近は研究でも趣味でも 
手間のかかるアルゴリズムの 
実装をよくやってます
最近の制作物 
●JRなどの路線網を与えて 
「最短距離で全線乗り尽くす」 
乗り方を求める(C++) 
blog.livedoor.jp/maraigue/archives/1747895.html 
増毛 
新十津川 
苫小牧 
滝川 
東室蘭 
五稜郭 
函館 
長万部 
森 
大沼 
中小国 
室蘭 
追分 
沼ノ端 
稚内 
東釧路 
新得 
夕張 
新夕張 
根室 
南千歳 
新千歳空港 
桑園白石 
深川 
旭川新旭川 
富良野 
様似 
岩見沢
最近の制作物 
●単語一覧から最大単語数の 
しりとりを求める(Ruby) 
chiraura.hhiro.net/shiritori/
よろしく 
お願いします
今回話す内容
STL の型の使い分け - qiita 
http://qiita.com/h_hiro_/ 
items/a83a8fd2391d4a3f0e1c 
●ここに書いてない基本的な考え方+ 
ここに書いた内容の要点をお話しします 
●上記記事は、詳細な使い分けを 
実際に検討するために 
ご利用いただければと思います
今回のテーマ
STL
STLとは 
●Standard Template Libraryの略 
●汎用的、かつ型に依存しない 
データ構造や処理(アルゴリズム) 
を提供する
STLとは 
●Standard Template Libraryの略 
●汎用的、かつ型に依存しない 
データ構造や処理(アルゴリズム) 
を提供する
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); // 型を明示してもよい
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()); 
}
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バイト
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バイト
●汎用的に利用されるデータ構造や 
アルゴリズムを自前で作るのは 
ミス・バグの原因にもなる 
● STLが提供する機能の特性を 
理解したうえで、先人の力を借りよう 
●複数人で開発するときとかは特に。 
(標準ライブラリなので何かと便利!)
●汎用的に利用されるデータ構造や 
アルゴリズムを自前で作るのは 
ミス・バグの原因にもなる 
● STLが提供する機能の特性を 
理解したうえで、先人の力を借りよう 
●複数人で開発するときとかは特に。 
(標準ライブラリなそのれでもま何たかと便利!) 
なかなか大変なので 
今回解説するわけですが
STLの型
STLでは 
いろいろな型(クラス) 
が定義されている
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バイト
「可変長配列」とか 
「連想配列」とか 
汎用的なデータ構造が 
多数用意されている
ここでは 
「可変長配列」を 
使ったけど
似た用途で 
使える型が 
STLには他に2つ 
存在する
std::vector<int> hoge = {3, 1, 4}; 
std::deque<int> hoge = {3, 1, 4}; 
std::list<int> hoge = {3, 1, 4};
●どれも「要素を指定された 
順番に格納する」という 
点では共通 
●ただし、内部の実装が異なる。 
←得意/不得意な処理が 
 それぞれあるため。
vector: 
連続メモリ領域に格納 
deque: 
固定サイズの 
連続メモリ領域を 
複数確保して格納 
list: 
ポインタで 
繋いで格納 
(連結リスト) 
⋮ 
3 1 4 1 5 … 
4バイト4バイト4バイト 
4バイト4バイト 
3 1 4 
1 5 9 
Start 3 
前次 
1 
前次 
4 
前次 
End 
次前
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 …
deque: 固定サイズの連続メモリ領域を 
複数確保して格納 
→vectorに似るが、 
先頭・末尾への挿入・削除には強い 
⋮ 
3 1 4 
1 5 9 
3 1 4 
1 5 9 
2
list: ポインタで繋いで格納 
→挿入・削除には途中であっても強い 
→ランダムアクセスは低速(順に辿るため) 
 演算子 "[]" は定義されていない 
→メモリもvectorなどに比べれば多く必要 
 要素1つにつきポインタ変数が2つぶん必要 
Start 3 
前次 
1 
前次 
4 
前次 
End 
次前 
5 
前次
list: ポインタで繋いで格納 
→挿入・削除には途中であっても強い 
→ランダムアクセスは低速(順に辿るため) 
 演算子 "[]" は定義されていない 
→メモリもvectorなどに比べれば多く必要 
 要素1つにつきポインタ変数が2つぶん必要 
Start 3 
前次 
1 
前次 
4 
前次 
End 
次前 
5 
前次
本当に一長一短
「ランダムアクセス」 
「挿入・削除」 
両方無条件に有利と 
いう型は存在しない 
ほかに「検索」や「メモリ効率」 
などの話もある
"Effective STL"より引用 
●コンテナの任意の位置に新しい要素を 
挿入する必要があるか? 
(あるならlistが有利だが、メモリを食う) 
●要素がコンテナ内でどのように並ぶかが 
問題となるか? 
(気にしないなら連想配列が使える) 
●どのイテレータが使える必要があるか? 
(ランダムアクセスの可否など) 
etc.
どのデータ構造を使うと 
高速なのか/メモリ消費が少ないのか 
詳しくはこの記事で!(再掲) 
STLの型の使い分け - qiita 
http://qiita.com/h_hiro_/ 
items/a83a8fd2391d4a3f0e1c
STLの型の 
特性を知って 
より快適な 
C++ライフを!
Sapporo.cpp 第7回勉強会(2014.10.18) 
C++のSTLの 
コンテナ型を概観する 
終わり

More Related Content

PDF
中3女子でもわかる constexpr
Genya Murakami
 
PDF
C++ マルチスレッドプログラミング
Kohsuke Yuasa
 
PDF
GPGPU Seminar (GPU Accelerated Libraries, 1 of 3, cuBLAS)
智啓 出川
 
PDF
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
Preferred Networks
 
PDF
C++のライブラリを簡単に眺めてみよう
Hiro H.
 
PDF
LiDARとSensor Fusion
Satoshi Tanaka
 
PDF
組み込み関数(intrinsic)によるSIMD入門
Norishige Fukushima
 
PDF
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...
NTT DATA Technology & Innovation
 
中3女子でもわかる constexpr
Genya Murakami
 
C++ マルチスレッドプログラミング
Kohsuke Yuasa
 
GPGPU Seminar (GPU Accelerated Libraries, 1 of 3, cuBLAS)
智啓 出川
 
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
Preferred Networks
 
C++のライブラリを簡単に眺めてみよう
Hiro H.
 
LiDARとSensor Fusion
Satoshi Tanaka
 
組み込み関数(intrinsic)によるSIMD入門
Norishige Fukushima
 
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...
NTT DATA Technology & Innovation
 

What's hot (20)

PDF
C#の強み、或いは何故PHPから乗り換えるのか
Yoshifumi Kawai
 
PDF
VRChatとシリアル通信、現実と仮想を結ぶ ~UdonとPythonによる仮想COMポートのつくり方~
Hirokazu Onomichi
 
PPTX
マハラノビス距離を用いた異常値検知
Yuto Mori
 
PPTX
SDL2の紹介
nyaocat
 
PDF
KiCadで雑に基板を作る チュートリアル
裕士 常田
 
PDF
3次元レジストレーション(PCLデモとコード付き)
Toru Tamaki
 
PDF
SLAM開発における課題と対策の一例の紹介
miyanegi
 
PPTX
[DL輪読会]A System for General In-Hand Object Re-Orientation
Deep Learning JP
 
PPTX
ORB-SLAMの手法解説
Masaya Kaneko
 
PDF
スペクトラル・クラスタリング
Akira Miyazawa
 
PDF
規格書で読むC++11のスレッド
Kohsuke Yuasa
 
PPTX
つぶやきGLSLのススメ
notargs
 
PPTX
さるでも分かりたい9dofで作るクォータニオン姿勢
ytanno
 
PDF
ARM CPUにおけるSIMDを用いた高速計算入門
Fixstars Corporation
 
PDF
ネットワーク ゲームにおけるTCPとUDPの使い分け
モノビット エンジン
 
PDF
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
kiki utagawa
 
PDF
CUDAプログラミング入門
NVIDIA Japan
 
PDF
ROSでつながるVRChat
Hirokazu Onomichi
 
PDF
C/C++プログラマのための開発ツール
MITSUNARI Shigeo
 
PDF
リンク機構を有するロボットをGazeboで動かす
tomohiro kuwano
 
C#の強み、或いは何故PHPから乗り換えるのか
Yoshifumi Kawai
 
VRChatとシリアル通信、現実と仮想を結ぶ ~UdonとPythonによる仮想COMポートのつくり方~
Hirokazu Onomichi
 
マハラノビス距離を用いた異常値検知
Yuto Mori
 
SDL2の紹介
nyaocat
 
KiCadで雑に基板を作る チュートリアル
裕士 常田
 
3次元レジストレーション(PCLデモとコード付き)
Toru Tamaki
 
SLAM開発における課題と対策の一例の紹介
miyanegi
 
[DL輪読会]A System for General In-Hand Object Re-Orientation
Deep Learning JP
 
ORB-SLAMの手法解説
Masaya Kaneko
 
スペクトラル・クラスタリング
Akira Miyazawa
 
規格書で読むC++11のスレッド
Kohsuke Yuasa
 
つぶやきGLSLのススメ
notargs
 
さるでも分かりたい9dofで作るクォータニオン姿勢
ytanno
 
ARM CPUにおけるSIMDを用いた高速計算入門
Fixstars Corporation
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
モノビット エンジン
 
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
kiki utagawa
 
CUDAプログラミング入門
NVIDIA Japan
 
ROSでつながるVRChat
Hirokazu Onomichi
 
C/C++プログラマのための開発ツール
MITSUNARI Shigeo
 
リンク機構を有するロボットをGazeboで動かす
tomohiro kuwano
 
Ad

Similar to STLの型の使い分け(ダイジェスト版) @ Sapporo.cpp 第7回勉強会 (2014.10.18) (13)

PDF
C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)
Hiro H.
 
PDF
Boost.PropertyMap (.pdf)
Cryolite
 
PPTX
Boost.PropertyMap (.pptx)
Cryolite
 
PDF
すごいHaskell読書会
Kosuke Usami
 
PDF
研究生のためのC++ no.5
Tomohiro Namba
 
PDF
リテラル文字列型までの道
Satoshi Sato
 
PDF
ゲーム開発者のための C++11/C++14
Ryo Suzuki
 
PPTX
b木ノススメ
gotoloop
 
PDF
すごいHaskell読書会#1 in 大阪
yashigani
 
PDF
Boost.Flyweight
gintenlabo
 
PDF
すごいHaskell楽しく学ぼう 第6章
aomori ringo
 
PDF
C++によるソート入門
AimingStudy
 
C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)
Hiro H.
 
Boost.PropertyMap (.pdf)
Cryolite
 
Boost.PropertyMap (.pptx)
Cryolite
 
すごいHaskell読書会
Kosuke Usami
 
研究生のためのC++ no.5
Tomohiro Namba
 
リテラル文字列型までの道
Satoshi Sato
 
ゲーム開発者のための C++11/C++14
Ryo Suzuki
 
b木ノススメ
gotoloop
 
すごいHaskell読書会#1 in 大阪
yashigani
 
Boost.Flyweight
gintenlabo
 
すごいHaskell楽しく学ぼう 第6章
aomori ringo
 
C++によるソート入門
AimingStudy
 
Ad

More from Hiro H. (20)

PDF
シンデレラガールズの「シンプルな」カードゲームを作りたい(アイマスハッカソン2024)
Hiro H.
 
PDF
pandas便利だけどデフォルトパラメータでファイルを読み込むな!
Hiro H.
 
PDF
式を書くだけで最適化計算してほしい!~CVXPY編~
Hiro H.
 
PDF
旅行「#重複乗車禁止で名鉄完乗」とその数学的な解説
Hiro H.
 
PDF
シンデレラガール総選挙の「50位圏内の難しさ」はいかほどか?(23:20更新)
Hiro H.
 
PDF
「MVが3人な曲の一覧」って取得できます?(デレステ・ミリシタ・エムステ)
Hiro H.
 
PDF
配列の要素挿入・削除もランダムアクセスも両方高速にできる?
Hiro H.
 
PDF
PCSじゃないよ、PCAだよ
Hiro H.
 
PDF
声優やぞ!~シンデレラガールズにおける配役の歴史のRDFデータ化~
Hiro H.
 
PDF
スマホ音楽ゲームの動画から譜面をデータ化したかった
Hiro H.
 
PDF
シンデレラガールズ声優の増え方まとめ
Hiro H.
 
PDF
札幌C++勉強会 #13「最近、仕事でC++11以降の新規格が役に立ったシーン紹介」
Hiro H.
 
PDF
わんくま同盟 名古屋勉強会 #43 ライトニングトーク「Firefoxがver.57~(Quantum)にアップグレードされて困ったこと・やったこと」
Hiro H.
 
PDF
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Hiro H.
 
PDF
最近デレステ創作譜面作ってるので技術的な見地から話します
Hiro H.
 
PDF
デレステの劇場で登場したアイドルの回数の統計取ってます
Hiro H.
 
PDF
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Hiro H.
 
PDF
名古屋市営地下鉄最小距離完乗
Hiro H.
 
PDF
MSYS2使いはじめました
Hiro H.
 
PDF
関数の最小値を求めることから機械学習へ
Hiro H.
 
シンデレラガールズの「シンプルな」カードゲームを作りたい(アイマスハッカソン2024)
Hiro H.
 
pandas便利だけどデフォルトパラメータでファイルを読み込むな!
Hiro H.
 
式を書くだけで最適化計算してほしい!~CVXPY編~
Hiro H.
 
旅行「#重複乗車禁止で名鉄完乗」とその数学的な解説
Hiro H.
 
シンデレラガール総選挙の「50位圏内の難しさ」はいかほどか?(23:20更新)
Hiro H.
 
「MVが3人な曲の一覧」って取得できます?(デレステ・ミリシタ・エムステ)
Hiro H.
 
配列の要素挿入・削除もランダムアクセスも両方高速にできる?
Hiro H.
 
PCSじゃないよ、PCAだよ
Hiro H.
 
声優やぞ!~シンデレラガールズにおける配役の歴史のRDFデータ化~
Hiro H.
 
スマホ音楽ゲームの動画から譜面をデータ化したかった
Hiro H.
 
シンデレラガールズ声優の増え方まとめ
Hiro H.
 
札幌C++勉強会 #13「最近、仕事でC++11以降の新規格が役に立ったシーン紹介」
Hiro H.
 
わんくま同盟 名古屋勉強会 #43 ライトニングトーク「Firefoxがver.57~(Quantum)にアップグレードされて困ったこと・やったこと」
Hiro H.
 
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Hiro H.
 
最近デレステ創作譜面作ってるので技術的な見地から話します
Hiro H.
 
デレステの劇場で登場したアイドルの回数の統計取ってます
Hiro H.
 
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Hiro H.
 
名古屋市営地下鉄最小距離完乗
Hiro H.
 
MSYS2使いはじめました
Hiro H.
 
関数の最小値を求めることから機械学習へ
Hiro H.
 

Recently uploaded (11)

PDF
20250730_QiitaBash_LT登壇資料_PDC_Kurashina.pdf
pdckurashina
 
PDF
【学会聴講報告】CVPR2025からみるVision最先端トレンド / CVPR2025 report
Sony - Neural Network Libraries
 
PDF
TaketoFujikawa_ComicComputing12th_inKumamoto
Matsushita Laboratory
 
PPTX
baserCMS『カスタムコンテンツ』徹底活用術〜あなただけの管理画面を自由自在に〜
Ryuji Egashira
 
PPTX
2025_7_25_吉祥寺_設計ナイト_ADR運用におけるデータ利活用の考え方.pptx
ssuserfcafd1
 
PDF
MahiroYoshida_セリフに着目したキャラクタロール推定に関する基礎検討_sigcc12th2025
Matsushita Laboratory
 
PDF
第三世代 ウェザーステーションキット v3 ー WSC3-L 日本語カタログ
CRI Japan, Inc.
 
PDF
20250729_Devin-for-Enterprise
Masaki Yamakawa
 
PDF
LoRaWAN ウェザーステーションキット v3 -WSC3-L 日本語ユーザーマニュアル
CRI Japan, Inc.
 
PDF
VMUG Japan book vsan 20250515 CPU/Memory vSAN
Kazuhiro Sota
 
PDF
20250726_Devinで変えるエンプラシステム開発の未来
Masaki Yamakawa
 
20250730_QiitaBash_LT登壇資料_PDC_Kurashina.pdf
pdckurashina
 
【学会聴講報告】CVPR2025からみるVision最先端トレンド / CVPR2025 report
Sony - Neural Network Libraries
 
TaketoFujikawa_ComicComputing12th_inKumamoto
Matsushita Laboratory
 
baserCMS『カスタムコンテンツ』徹底活用術〜あなただけの管理画面を自由自在に〜
Ryuji Egashira
 
2025_7_25_吉祥寺_設計ナイト_ADR運用におけるデータ利活用の考え方.pptx
ssuserfcafd1
 
MahiroYoshida_セリフに着目したキャラクタロール推定に関する基礎検討_sigcc12th2025
Matsushita Laboratory
 
第三世代 ウェザーステーションキット v3 ー WSC3-L 日本語カタログ
CRI Japan, Inc.
 
20250729_Devin-for-Enterprise
Masaki Yamakawa
 
LoRaWAN ウェザーステーションキット v3 -WSC3-L 日本語ユーザーマニュアル
CRI Japan, Inc.
 
VMUG Japan book vsan 20250515 CPU/Memory vSAN
Kazuhiro Sota
 
20250726_Devinで変えるエンプラシステム開発の未来
Masaki Yamakawa
 

STLの型の使い分け(ダイジェスト版) @ Sapporo.cpp 第7回勉強会 (2014.10.18)