Generic programming と STL

11
Generic programming と STL H107034 とと とと H107124 とと とと

description

Generic programming と STL. H107034  神谷 真輝 H107124  山下 陽平. Generic programming とは. データ型に依存しないプログラミングのこと たとえば   データ型に依存していると   →それぞれの型に対応したコードが必要   データ型に依存しないと   →コードは一つで十分. テンプレート. テンプレート機能を使うことで 決まった型に依存しない プログラミングを! テンプレート関数. template 返り値の型 関数名 (T& 引数 ) { - PowerPoint PPT Presentation

Transcript of Generic programming と STL

Page 1: Generic programming  と  STL

Generic programming と STL

H107034  神谷 真輝H107124  山下 陽平

Page 2: Generic programming  と  STL

Generic programming とは•データ型に依存しないプログラミングのこと•たとえば  データ型に依存していると  →それぞれの型に対応したコードが必要  データ型に依存しないと  →コードは一つで十分

Page 3: Generic programming  と  STL

テンプレート•テンプレート機能を使うことで 決まった型に依存しないプログラミングを!

•テンプレート関数template <class T>

返り値の型 関数名 (T& 引数 )

{

T 変数名 ; // T 型の変数を定義

}

Page 4: Generic programming  と  STL

テンプレート•クラステンプレート

• 普通の関数、クラスと同じように扱える• 引数、戻り値、ローカル変数が型に依存しない

template <class T>

class クラス名

{

メソッド名 (const T prm_t) { m_t = pram_t}

T m_t;

};

Page 5: Generic programming  と  STL

STL とはStandard Template Library の略。C++ の標準ライブラリの一つである。テンプレート機能を最大限構成をとっており、コンテナ、イテレータ、アルゴリズム、関数オブジェクトからなっている。

Page 6: Generic programming  と  STL

コンテナ•データを格納するもの•ヘッダファイル名は使うコンテナ名と同じ•コンテナの一覧

……etcetc

vector 実行時に配列の大きさを変えることができる配列 list 双方向にアクセス可能な線形リスト queue 先入れ先出し (FIFO) のキュー deque コンテナの両端からアクセスできるキュー stack 先入れ後出し (FILO) のスタック

Page 7: Generic programming  と  STL

イテレータ•コンテナの各要素を参照するためのクラス  ( 配列の添え字、ポインタに近い )•イテレータの種類入力イテレータ、出力イテレータ、前方イテレータ双方向イテレータ、ランダムアクセスイテレータ

※イテレータは変数として宣言して使用する  vector<class 名 >::iterator itr   =

vect.begin();  vector<class 名 >::iterator itrEnd   =

vect.end();

Page 8: Generic programming  と  STL

アルゴリズム• 一般的なアルゴリズムの意味ではなく、 イテレータで指定したコンテナへの操作を行う関数• ヘッダファイル名は algorithm• 使えるアルゴリズムは標準で 100 以上存在する コピー、ソート、最大値最少値、カウント、探索 置換、削除、並べ替え    … etc

• 基本的なアルゴリズムはまず存在する →コードが数行で済むというメリット

Page 9: Generic programming  と  STL

関数オブジェクト• オブジェクトを関数であるかのように扱うことができる• 例

#include <cstdio>#include <functional>

void Use_plus(){ int i; std::plus<int> cPlus; // 関数オブジェクト i = cPlus( 100, 200 ); printf( "%d\n", i );}

Page 10: Generic programming  と  STL

課題• Int 型の vector コンテナに 5 つ数字を格納し、イテレータを用いて表示する。

• Student クラス型の vector コンテナを作る。 ・メンバに名前 ( 文字列 ), 学年 ( 数字 ), 学籍番号 ( 文字列)

 ・実行時、ユーザにメンバの値を入力させる。

• Student クラスをソートする ・名前順 ・学年順にソートし同学年の場合は学籍番号順の二つを行い結果を表示する。

Page 11: Generic programming  と  STL

参考サイト• STL samples http://www.s34.co.jp/cpptechdoc/reference/stl_samples/

• STL( ソースコードのサンプル )

http://www.ne.jp/asahi/yamashita/programming/tips/stl.html

• C++ のリファレンス http://www.cppll.jp/cppreference/index.html