Submit Search
Upload
STLのソースコードを読んでみよう!~std::vector編~
•
11 likes
•
12,093 views
Hiro H.
Follow
札幌C++勉強会 #5 (2013.12.7)での企画です。 gcc 4.8の<vector>のコードを読むにあたっての補足資料です。
Read less
Read more
Technology
Education
Report
Share
Report
Share
1 of 29
Download now
Download to read offline
Recommended
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.
Recommended
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.
Boost.GraphでJR全線乗り尽くしプランを立てる - プログラミング生放送+CLR/H+Sapporo.cpp 勉強会@札幌 (2014.7.12)
Boost.GraphでJR全線乗り尽くしプランを立てる - プログラミング生放送+CLR/H+Sapporo.cpp 勉強会@札幌 (2014.7.12)
Hiro H.
Boost.勉強会 #15 札幌 LT「8年間の研究生活でC++書いてて大変だったことベスト3」
Boost.勉強会 #15 札幌 LT「8年間の研究生活でC++書いてて大変だったことベスト3」
Hiro H.
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
akihisamiyanaga1
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
Yuki Kikuchi
More Related Content
More from 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.
Boost.GraphでJR全線乗り尽くしプランを立てる - プログラミング生放送+CLR/H+Sapporo.cpp 勉強会@札幌 (2014.7.12)
Boost.GraphでJR全線乗り尽くしプランを立てる - プログラミング生放送+CLR/H+Sapporo.cpp 勉強会@札幌 (2014.7.12)
Hiro H.
Boost.勉強会 #15 札幌 LT「8年間の研究生活でC++書いてて大変だったことベスト3」
Boost.勉強会 #15 札幌 LT「8年間の研究生活でC++書いてて大変だったことベスト3」
Hiro H.
More from Hiro H.
(20)
スマホ音楽ゲームの動画から譜面をデータ化したかった
スマホ音楽ゲームの動画から譜面をデータ化したかった
シンデレラガールズ声優の増え方まとめ
シンデレラガールズ声優の増え方まとめ
札幌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線全線乗り尽くし」を解いてもらった方法
Boost.GraphでJR全線乗り尽くしプランを立てる - プログラミング生放送+CLR/H+Sapporo.cpp 勉強会@札幌 (2014.7.12)
Boost.GraphでJR全線乗り尽くしプランを立てる - プログラミング生放送+CLR/H+Sapporo.cpp 勉強会@札幌 (2014.7.12)
Boost.勉強会 #15 札幌 LT「8年間の研究生活でC++書いてて大変だったことベスト3」
Boost.勉強会 #15 札幌 LT「8年間の研究生活でC++書いてて大変だったことベスト3」
Recently uploaded
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
akihisamiyanaga1
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
Yuki Kikuchi
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
Hiroshi Tomioka
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
FumieNakayama
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
FumieNakayama
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
博三 太田
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
sugiuralab
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
UEHARA, Tetsutaro
Recently uploaded
(8)
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
STLのソースコードを読んでみよう!~std::vector編~
1.
札幌C++勉強会 #5 (2013.12.7) STLのソースコードを 読んでみよう! ~std::vector編~ H.Hiro http://hhiro.net/about/ github:
maraigue Twitter: @h_hiro_
2.
自己紹介
3.
H.Hiro • 学位取得に向けて&仕事探しで 格闘中の大学院生 (博士課程**年目) • 研究でアルゴリズムの開発・比較を しているので、C++はお世話に なりっぱなし
4.
最近作ったもの
5.
最近作ったもの 置き場所 http://chiraura.hhiro.net/shiritori/ ネタ元 http://codeiq.hatenablog.com/entry/2013/08/27/154926
6.
最近作ったもの 置き場所 http://chiraura.hhiro.net/shiritori/ ネタ元 ※ただしコードはRuby http://codeiq.hatenablog.com/entry/2013/08/27/154926
7.
今日やること
8.
STLの std::vectorの ソースコードを読む
9.
確認
10.
STL って何ですか
11.
STLとは • Standard Template
Libraryの略 • C++における標準ライブラリの一部 主にデータ構造・アルゴリズムを提供する (可変長配列、連結リスト、集合など) • テンプレート機構により、だいたいどんな型に 対しても上記の機構が利用できる std::list<int> // 整数の連結リスト std::list<double> // 浮動小数点数の
12.
std::vector って何ですか
13.
std::vectorとは • 可変長配列のクラス vec =
std::vector<double>(24); vec.resize(11); • 添字を指定しての要素アクセスは 定数時間で完了 vec[3] = 3776.0; • ただし配列サイズの変更は、配列サイズに 比例した時間が(最悪ケースで)必要 vec.push_back(3776.0);
14.
注目して いただきたい点
15.
1. STLのクラスが どんなソースコードで できてるのか
16.
2. 普段あまり 注目されない機能
17.
3. C++11に おける変化
18.
それでは 読んでいきます
19.
質問割り込み 歓迎
20.
ファイル構成(抜粋) • vector • bits/ •
allocator.h • range_access.h • stl_algobase.h • stl_bvector.h • stl_construct.h • stl_uninitialized.h • stl_vector.h
21.
ファイル構成(抜粋) • vector • bits/ •
allocator.h • range_access.h • stl_algobase.h • stl_bvector.h • stl_construct.h • stl_uninitialized.h • stl_vector.h
22.
余談 “bits”って何ですか!
23.
余談 “bits”って何ですか! → • stackoverflow.com/questions/5368035/ whats-the-meaning-of-bits-in-usr-include-c-4-4-bits • kotobank.jp/ejword/bit?dic=pej4&oid=SPEJ00763800 「細かく刻んだもの」(実装をいくつかの ファイルに)くらいの意味と思われるが はっきりとしたことは不明なよう
24.
コンストラクタ std::vectorのコンストラクタは結構多い explicit vector(const Allocator&
a=Allocator()); explicit vector(size_type n); explicit vector(size_type n, const T& value, const Allocator& a=Allocator()); template <class InputIter> vector(InputIter first, InputIter last, const Allocator& a=Allocator()); vector(const vector& x); // C++11 vector(const vector& x, const Allocator& a); vector(vector && x); vector(vector && x, const Allocator& a); vector(initializer_list<T> il, const Allocator& a=Allocator()); http://sites.google.com/site/cpprefjp/reference/vector/vector
25.
コンストラクタ std::vectorのコンストラクタは結構多い explicit vector(const Allocator&
a=Allocator()); explicit vector(size_type n); explicit vector(size_type n, const T& value, const Allocator& a=Allocator()); template <class InputIter> vector(InputIter first, InputIter last, const Allocator& a=Allocator()); vector(const vector& x); // C++11 vector(const vector& x, const Allocator& a); vector(vector && x); vector(vector && x, const Allocator& a); vector(initializer_list<T> il, const Allocator& a=Allocator()); http://sites.google.com/site/cpprefjp/reference/vector/vector
26.
「&&」とは • 「右辺値参照」と呼ばれる機能(C++11で規格化!) • 一見すると代入に見えるのだが、代入元のデータが 破壊されうる Ryukogo
x(“Omotenashi”); Ryukogo y = std::move(x); // xは当初の状態が維持されているとは限らない • 一時的にしか使わないオブジェクトを、別の変数に 代入するときに使われる(ムーブセマンティクス) • 参考サイト http://program.station.ez-net.jp/special/handbook/cpp/ syntax/move.asp
27.
「&&」とは(補足) • 「2変数の中身の入れ替え」のような 一時変数が必然的に必要な場合に有効 • 実際、C++11以降のstd::swapは std::moveを使う仕様になった http://cpplover.blogspot.jp/2012/03/ c11stdswapc03stdswap.html 自分が作ったクラスは、右辺値参照(ムーブ) によるコンストラクタ/代入がないと std::moveに与えられなくなった
28.
コンストラクタ コンストラクタが多い explicit vector(const Allocator&
a=Allocator()); explicit vector(size_type n); explicit vector(size_type n, const T& value, const Allocator& a=Allocator()); template <class InputIter> vector(InputIter first, InputIter last, const Allocator& a=Allocator()); vector(const vector& x); // C++11 vector(const vector& x, const Allocator& a); vector(vector&& x); vector(vector&& x, const Allocator& a); vector(initializer_list<T> il, const Allocator& a=Allocator());
29.
allocatorとは • メモリの確保と開放を抽象化したもの • 「確保と開放」の手段を、new/delete以外の 方法に差し替えることが可能になる •
自分でメモリを別途確保していて、それを STLコンテナに使わせたい場合など • 参考サイト: www.geocities.jp/ky_webid/cpp/library/028.html
Download now