Suche senden
Hochladen
研究生のためのC++ no.4
•
0 gefällt mir
•
300 views
T
Tomohiro Namba
Folgen
研究室のゼミの資料。研究に役立つC++入門。 四回目はテンプレート。
Weniger lesen
Mehr lesen
Software
Melden
Teilen
Melden
Teilen
1 von 36
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
研究生のためのC++ no.3
研究生のためのC++ no.3
Tomohiro Namba
研究生のためのC++ no.2
研究生のためのC++ no.2
Tomohiro Namba
Enshu8
Enshu8
sudahiroshi
Pythonデータ分析 第3回勉強会資料 8章
Pythonデータ分析 第3回勉強会資料 8章
Makoto Kawano
Emcjp item21
Emcjp item21
MITSUNARI Shigeo
命令プログラミングから関数プログラミングへ
命令プログラミングから関数プログラミングへ
Naoki Kitora
CLR/H No.35-2
CLR/H No.35-2
Nobuhisa Koizumi
[第2版]Python機械学習プログラミング 第14章
[第2版]Python機械学習プログラミング 第14章
Haruki Eguchi
Empfohlen
研究生のためのC++ no.3
研究生のためのC++ no.3
Tomohiro Namba
研究生のためのC++ no.2
研究生のためのC++ no.2
Tomohiro Namba
Enshu8
Enshu8
sudahiroshi
Pythonデータ分析 第3回勉強会資料 8章
Pythonデータ分析 第3回勉強会資料 8章
Makoto Kawano
Emcjp item21
Emcjp item21
MITSUNARI Shigeo
命令プログラミングから関数プログラミングへ
命令プログラミングから関数プログラミングへ
Naoki Kitora
CLR/H No.35-2
CLR/H No.35-2
Nobuhisa Koizumi
[第2版]Python機械学習プログラミング 第14章
[第2版]Python機械学習プログラミング 第14章
Haruki Eguchi
NumPy闇入門
NumPy闇入門
Ryosuke Okuta
[第2版]Python機械学習プログラミング 第8章
[第2版]Python機械学習プログラミング 第8章
Haruki Eguchi
Python for Data Anaysis第2回勉強会4,5章
Python for Data Anaysis第2回勉強会4,5章
Makoto Kawano
Introduction to NumPy & SciPy
Introduction to NumPy & SciPy
Shiqiao Du
[第2版]Python機械学習プログラミング 第16章
[第2版]Python機械学習プログラミング 第16章
Haruki Eguchi
NumPyが物足りない人へのCython入門
NumPyが物足りない人へのCython入門
Shiqiao Du
Ekmett勉強会発表資料
Ekmett勉強会発表資料
時響 逢坂
Ekmett勉強会発表資料
Ekmett勉強会発表資料
時響 逢坂
科学技術計算関連Pythonパッケージの概要
科学技術計算関連Pythonパッケージの概要
Toshihiro Kamishima
2013.07.15 はじパタlt scikit-learnで始める機械学習
2013.07.15 はじパタlt scikit-learnで始める機械学習
Motoya Wakiyama
関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCaml
Haruka Oikawa
Gura プログラミング言語の紹介
Gura プログラミング言語の紹介
Yutaka Saito
マスターオブゴールーチンアンドチャネル スタートGo #1
マスターオブゴールーチンアンドチャネル スタートGo #1
Takuya Ueda
すごいHaskell楽しく学ぼう-第12章モノイド-
すごいHaskell楽しく学ぼう-第12章モノイド-
Hiromasa Ohashi
VS勉強会 .NET Framework 入門
VS勉強会 .NET Framework 入門
kamukiriri
for関数を使った繰り返し処理によるヒストグラムの一括出力
for関数を使った繰り返し処理によるヒストグラムの一括出力
imuyaoti
Real World OCamlを読んでLispと協調してみた
Real World OCamlを読んでLispと協調してみた
blackenedgold
C++コンパイラ GCCとClangからのメッセージをお読みください
C++コンパイラ GCCとClangからのメッセージをお読みください
digitalghost
すごいH 第12章モノイド
すごいH 第12章モノイド
Shinta Hatatani
Van laarhoven lens
Van laarhoven lens
Naoki Aoyama
研究生のためのC++ no.7
研究生のためのC++ no.7
Tomohiro Namba
Rango celdas autorellenar
Rango celdas autorellenar
Cecibel Curimilma
Weitere ähnliche Inhalte
Was ist angesagt?
NumPy闇入門
NumPy闇入門
Ryosuke Okuta
[第2版]Python機械学習プログラミング 第8章
[第2版]Python機械学習プログラミング 第8章
Haruki Eguchi
Python for Data Anaysis第2回勉強会4,5章
Python for Data Anaysis第2回勉強会4,5章
Makoto Kawano
Introduction to NumPy & SciPy
Introduction to NumPy & SciPy
Shiqiao Du
[第2版]Python機械学習プログラミング 第16章
[第2版]Python機械学習プログラミング 第16章
Haruki Eguchi
NumPyが物足りない人へのCython入門
NumPyが物足りない人へのCython入門
Shiqiao Du
Ekmett勉強会発表資料
Ekmett勉強会発表資料
時響 逢坂
Ekmett勉強会発表資料
Ekmett勉強会発表資料
時響 逢坂
科学技術計算関連Pythonパッケージの概要
科学技術計算関連Pythonパッケージの概要
Toshihiro Kamishima
2013.07.15 はじパタlt scikit-learnで始める機械学習
2013.07.15 はじパタlt scikit-learnで始める機械学習
Motoya Wakiyama
関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCaml
Haruka Oikawa
Gura プログラミング言語の紹介
Gura プログラミング言語の紹介
Yutaka Saito
マスターオブゴールーチンアンドチャネル スタートGo #1
マスターオブゴールーチンアンドチャネル スタートGo #1
Takuya Ueda
すごいHaskell楽しく学ぼう-第12章モノイド-
すごいHaskell楽しく学ぼう-第12章モノイド-
Hiromasa Ohashi
VS勉強会 .NET Framework 入門
VS勉強会 .NET Framework 入門
kamukiriri
for関数を使った繰り返し処理によるヒストグラムの一括出力
for関数を使った繰り返し処理によるヒストグラムの一括出力
imuyaoti
Real World OCamlを読んでLispと協調してみた
Real World OCamlを読んでLispと協調してみた
blackenedgold
C++コンパイラ GCCとClangからのメッセージをお読みください
C++コンパイラ GCCとClangからのメッセージをお読みください
digitalghost
すごいH 第12章モノイド
すごいH 第12章モノイド
Shinta Hatatani
Van laarhoven lens
Van laarhoven lens
Naoki Aoyama
Was ist angesagt?
(20)
NumPy闇入門
NumPy闇入門
[第2版]Python機械学習プログラミング 第8章
[第2版]Python機械学習プログラミング 第8章
Python for Data Anaysis第2回勉強会4,5章
Python for Data Anaysis第2回勉強会4,5章
Introduction to NumPy & SciPy
Introduction to NumPy & SciPy
[第2版]Python機械学習プログラミング 第16章
[第2版]Python機械学習プログラミング 第16章
NumPyが物足りない人へのCython入門
NumPyが物足りない人へのCython入門
Ekmett勉強会発表資料
Ekmett勉強会発表資料
Ekmett勉強会発表資料
Ekmett勉強会発表資料
科学技術計算関連Pythonパッケージの概要
科学技術計算関連Pythonパッケージの概要
2013.07.15 はじパタlt scikit-learnで始める機械学習
2013.07.15 はじパタlt scikit-learnで始める機械学習
関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCaml
Gura プログラミング言語の紹介
Gura プログラミング言語の紹介
マスターオブゴールーチンアンドチャネル スタートGo #1
マスターオブゴールーチンアンドチャネル スタートGo #1
すごいHaskell楽しく学ぼう-第12章モノイド-
すごいHaskell楽しく学ぼう-第12章モノイド-
VS勉強会 .NET Framework 入門
VS勉強会 .NET Framework 入門
for関数を使った繰り返し処理によるヒストグラムの一括出力
for関数を使った繰り返し処理によるヒストグラムの一括出力
Real World OCamlを読んでLispと協調してみた
Real World OCamlを読んでLispと協調してみた
C++コンパイラ GCCとClangからのメッセージをお読みください
C++コンパイラ GCCとClangからのメッセージをお読みください
すごいH 第12章モノイド
すごいH 第12章モノイド
Van laarhoven lens
Van laarhoven lens
Andere mochten auch
研究生のためのC++ no.7
研究生のためのC++ no.7
Tomohiro Namba
Rango celdas autorellenar
Rango celdas autorellenar
Cecibel Curimilma
Music Distribution Presentation
Music Distribution Presentation
juankey56
..Festival Der Zeppeline
..Festival Der Zeppeline
Carmen María Pérez
E tefl
E tefl
sahudmalvin123
Reference Pete
Reference Pete
Sarah Schaefer
Diseño de tablas
Diseño de tablas
Cecibel Curimilma
Music Distribution_MVT-SUGO
Music Distribution_MVT-SUGO
jonathan johnson
La celebración pedagógica como eje
La celebración pedagógica como eje
analabradorcra
Taller NTIC
Taller NTIC
Angélica María García Benavides
La historia interminable
La historia interminable
analabradorcra
Great ideas in music distribution
Great ideas in music distribution
Kristin Thomson
Yeny andrea Contreras
Yeny andrea Contreras
Yeny Andrea Gavidia Contreras
Presentation1 incoterms 2010
Presentation1 incoterms 2010
Sandro Sans
Resume_Rajini (1)
Resume_Rajini (1)
rajini thumma
درباره ی بلوبری
درباره ی بلوبری
دمنوش های گیاهی نیوشا
string , pointer
string , pointer
Arafat Bin Reza
Andere mochten auch
(17)
研究生のためのC++ no.7
研究生のためのC++ no.7
Rango celdas autorellenar
Rango celdas autorellenar
Music Distribution Presentation
Music Distribution Presentation
..Festival Der Zeppeline
..Festival Der Zeppeline
E tefl
E tefl
Reference Pete
Reference Pete
Diseño de tablas
Diseño de tablas
Music Distribution_MVT-SUGO
Music Distribution_MVT-SUGO
La celebración pedagógica como eje
La celebración pedagógica como eje
Taller NTIC
Taller NTIC
La historia interminable
La historia interminable
Great ideas in music distribution
Great ideas in music distribution
Yeny andrea Contreras
Yeny andrea Contreras
Presentation1 incoterms 2010
Presentation1 incoterms 2010
Resume_Rajini (1)
Resume_Rajini (1)
درباره ی بلوبری
درباره ی بلوبری
string , pointer
string , pointer
Ähnlich wie 研究生のためのC++ no.4
Lambda in template_final
Lambda in template_final
Cryolite
What is template
What is template
Akira Takahashi
Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7
Preferred Networks
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
Tomoharu ASAMI
Pythonで始めるDropboxAPI
Pythonで始めるDropboxAPI
Daisuke Igarashi
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」
fukuoka.ex
Nds meetup8 lt
Nds meetup8 lt
ushiboy
Learning Template Library Design using Boost.Geomtry
Learning Template Library Design using Boost.Geomtry
Akira Takahashi
基礎構文班22回目 試験対策もどき
基礎構文班22回目 試験対策もどき
XMLProJ2014
boost tour 1.48.0 all
boost tour 1.48.0 all
Akira Takahashi
JavaScript/CSS 2015 Autumn
JavaScript/CSS 2015 Autumn
Koji Ishimoto
関数プログラミング入門
関数プログラミング入門
Hideyuki Tanaka
ECMAScript 6 Features(PDF 版)
ECMAScript 6 Features(PDF 版)
taskie
Prosym2012
Prosym2012
MITSUNARI Shigeo
フラグを愛でる
フラグを愛でる
MITSUNARI Shigeo
JavaScriptクイックスタート
JavaScriptクイックスタート
Shumpei Shiraishi
[Basic 3] 計算量 / 配列, 連結リスト / ハッシュ テーブル / スタック, キュー
[Basic 3] 計算量 / 配列, 連結リスト / ハッシュ テーブル / スタック, キュー
Yuto Takei
プログラミングHaskell(第2章)
プログラミングHaskell(第2章)
yaju88
Replace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JP
Akira Takahashi
JavaScript 講習会 #1
JavaScript 講習会 #1
Susisu
Ähnlich wie 研究生のためのC++ no.4
(20)
Lambda in template_final
Lambda in template_final
What is template
What is template
Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
Pythonで始めるDropboxAPI
Pythonで始めるDropboxAPI
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」
Nds meetup8 lt
Nds meetup8 lt
Learning Template Library Design using Boost.Geomtry
Learning Template Library Design using Boost.Geomtry
基礎構文班22回目 試験対策もどき
基礎構文班22回目 試験対策もどき
boost tour 1.48.0 all
boost tour 1.48.0 all
JavaScript/CSS 2015 Autumn
JavaScript/CSS 2015 Autumn
関数プログラミング入門
関数プログラミング入門
ECMAScript 6 Features(PDF 版)
ECMAScript 6 Features(PDF 版)
Prosym2012
Prosym2012
フラグを愛でる
フラグを愛でる
JavaScriptクイックスタート
JavaScriptクイックスタート
[Basic 3] 計算量 / 配列, 連結リスト / ハッシュ テーブル / スタック, キュー
[Basic 3] 計算量 / 配列, 連結リスト / ハッシュ テーブル / スタック, キュー
プログラミングHaskell(第2章)
プログラミングHaskell(第2章)
Replace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JP
JavaScript 講習会 #1
JavaScript 講習会 #1
研究生のためのC++ no.4
1.
C++ For Researchers 研究生のためのC++ 企画・立案
難波知宏
2.
テンプレート 第四回 2
3.
関数テンプレート 第一節 3
4.
関数テンプレートとは 4 Sample 4-1
5.
5 そうだ、max関数を作ろう
6.
sample 4-1-1 int max(int
x, int y) { return (x > y) ? x : y; } 6 関数テンプレートとは Sample 4-1 従来のプログラム double版も欲しくなった e ? a : b e が true のとき a false のとき b を返す
7.
sample 4-1-1 int max(int
x, int y) { return (x > y) ? x : y; } double max(double x, double y) { return (x > y) ? x : y; } 7 関数テンプレートとは Sample 4-1 従来のプログラム データ型が違うだけで 同じ処理なのに、 別々に記述 何とかして一つに まとめられないか?
8.
8 テ ン プ レ ー ト で で き ま す よ
9.
sample 4-1-2 template <typename
Type> Type max(Type x, Type y) { return (x > y) ? x : y; } 9 関数テンプレートとは Sample 4-1 テンプレートを使って一つにまとめる データ型に依存 しない関数 template <…> を関数の前につけると、 関数テンプレートになる.
10.
テンプレート引数の明示指定 Sample 4-2 10
11.
sample 4-2-1 template <typename
Type> Type max(Type x, Type y) { return (x > y) ? x : y; } int main() { double c = max(7, 3.0); // Compile error! } 11 テンプレート引数の明示指定 Sample 4-2 次のプログラムはコンパイルエラーになります。 テンプレート引数Typeを intとdoubleのどちらに したらいいかわからない! コンパイラ
12.
sample 4-2-1 template <typename
Type> Type max(Type x, Type y) { return (x > y) ? x : y; } int main() { double c = max<double>(7, 3.0); // OK. } 12 テンプレート引数の明示指定 Sample 4-2 <…>でテンプレート引数の型を指定すればよい。 実は、テンプレート引数 が省略された場合、 コンパイラが自動で 推論しているんだよね コンパイラ
13.
関数テンプレートの特殊化 13 Sample 4-3
14.
14 string型でもmax関数が動くようにしたい
15.
15 そんでもって string型の場合は、長さが大きい方を返したい
16.
sample 4-3-1 #include <string> template
<typename Type> Type max(Type x, Type y) { return (x > y) ? x : y; } int main() { double c = max<double>(7, 3.0); // OK. char* d = max<char*>("hoge", "hogehoge");// NG (Unexpected result). } 16 関数テンプレートの特殊化 Sample 4-3 従来のプログラム 期待通りに ならない
17.
sample 4-3-2 #include <string> template
<typename Type> Type max(Type x, Type y) { return (x > y) ? x : y; } template <> char* max(char* x, char* y) { return (strlen(x) > strlen(y)) ? x : y; } int main() { double c = max<double>(7, 3.0); // OK. char* d = max<char*>("hoge", "hogehoge"); // OK. } 17 関数テンプレートの特殊化 Sample 4-3 特殊化をすれば、文字列専用の処理ができる テンプレート引数がchar* の場合は、例外的にこの 関数が呼ばれる
18.
クラステンプレート 第二節 18
19.
19 クラスにもテンプレートの概念を適用できます
20.
クラステンプレートとは 20 Sample 4-4
21.
21 そうだ。ベクトルクラスつくろう
22.
sample 4-4-1/Vector3.h class Vector3 { public: Vector3()
… { … } Vector3(float x, float y, float z) … { … } static float dot(Vector3 a, Vector3 b) { … } float x, y, z; }; Vector3 operator +(Vector3 a, Vector3 b) { … } 22 クラステンプレートとは Sample 4-4 前回作ったベクトルクラス(の一部) float以外でも使えるようにしたい
23.
sample 4-4-2/Vector3.h template <typename
T> class Vector3 { (省略) T x, y, z; }; 23 クラステンプレートとは Sample 4-4 テンプレートベクトルクラス template <…> をクラス定義の前につけると、 クラステンプレートになる. データ型に依存 しないクラス
24.
クラステンプレートの特殊化 24 Sample 4-5
25.
25 関数テンプレートと同じように、クラステンプレート も特殊化ができます(省略)
26.
テンプレートのからくり 第三節 26
27.
テンプレートのからくり テンプレートの型引数ごとに別個にコードを生成 27
28.
sample 4-6-1 #include <iostream> template
<typename T> void func() {} int main() { printf("<int> -> %p¥n", func<int>); printf("<double> -> %p¥n", func<double>); } 実行結果 <int> -> 0095100F <double> -> 00951014 28 テンプレートのからくり 関数のアドレスを調べればわかる func<int>が出現した 時点でfunc<int>を コンパイル時に生成 コンパイラ
29.
まとめ 29
30.
template <typename T> void
f() { /* ... */ } template <typename T> class C { /* ... */ }; 30 テンプレート データ型に依存しない関数・クラスを作る仕組み template <…> を関数の前につけると 関数テンプレートを定義 template <…> をクラスの前につけると クラステンプレートを定義
31.
template <typename T> void
f() { /* ... */ } template <typename T> class C { /* ... */ }; int main() { f<int>(); C<int> c; } 31 テンプレート引数の指定 f<…> C<…> でテンプレート引数を 明示的に指定
32.
言語比較 <ジェネリック編> おまけ 32
33.
ジェネリック機能比較 C++ C# Java 実体の生成 タイミング コンパイル時
実行時 コンパイル時にキャストを挿 入し非ジェネリックに変換、 つまり実体は一つ パフォーマンス ◎ (実体別に最適化) ○ × (キャストによるオーバーヘッ ドが発生) コンパイル後の コード共有 × (プログラムサイズが爆発 する原因) ○ ○ (実体は一つしかない) 組み込み型の ジェネリック引数 ○ ○ (組み込み型の ジェネリックはク ラス型のものと は別に生成) × (クラス型のみ○) 33 このページに詳しく書いてあります
34.
sample 4-7-1/main.cpp #include <iostream> template
<typename T> class C { public: template <typename U> static void F() {} }; int main() { C<int>::F<double>(); printf("%s¥n", typeid(C<int>).name()); printf("%s¥n", typeid(C<double>).name()); } 実行結果 class C<int> class C<double> 34 言語比較 <ジェネリック編> おまけ C++のジェネリック(テンプレート)
35.
sample 4-7-2/Program.cs using System; class
C<T> { public static void F<U>() { } } class Program { static void Main(string[] args) { C<int>.F<double>(); Console.WriteLine(typeof(C<int>)); Console.WriteLine(typeof(C<float>)); } } 実行結果 C`1[System.Int32] C`1[System.Single] 35 言語比較 <ジェネリック編> おまけ C#のジェネリック
36.
sample 4-7-3/Program.java 実行結果 class C class
C 36 おまけ Javaのジェネリック 言語比較 <ジェネリック編> 型情報が抜け落ちてる…
Jetzt herunterladen