問題3:テンプレートとSTL
この問題を解くためには… |
→ 応用編第3日目参照 |
---|
probex3-1.(難易度:★)
以下のプログラムで型に応じて複数定義されている関数maxを、テンプレートを用いて一つの関数にしなさい。
main.cpp#include <iostream> #include <string> using namespace std; // 整数値を比較し、大きいほうを返す関数 int max(int,int); // 実数を比較し、大きいほうを返す関数 double max(double,double); // 文字列を比較し、長いほうを返す関数 string max(string,string); int main(){ cout << max(1,2) << endl; cout << max(1.75,3.12) << endl; string s1 = "aiu",s2 = "eo"; cout << max(s1,s2) << endl; return 0; } int max(int a,int b) { if(a > b){ return a; } return b; } double max(double a,double b) { if(a > b){ return a; } return b; } string max(string a,string b) { if(a > b){ return a; } return b; }
攻撃に出るため飛行
戦闘します
乗客を乗せて目的地まで飛行します。
乗客を目的地まで運びます。
戦闘します
乗客を乗せて目的地まで飛行します。
乗客を目的地まで運びます。
probex3-2.(難易度:★★)
以下のプログラムでのクラスCollectionIntは、整数型の配列を保持し、その中から最大値と最少値を取得できるクラスである。このクラスをテンプレートを使って、double,stringなど、あらゆる型で同じ処理ができるクラス、collectionを作り、処理を書き換えなさい。
main.cpp#include <iostream> #include "collectionint.h" using namespace std; int main(){ // 配列変数の定義 int array[] = { 1,5,4,2,3 }; CollectionInt* c = new CollectionInt(array,5); c->showArray(); cout << "最大値 : " << c->getMax() << endl; cout << "最小値 : " << c->getMin() << endl; delete c; return 0; }
#ifndef _COLLECTIONINT_H_ #define _COLLECTIONINT_H_ class CollectionInt{ private: // 配列データ int* m_pArray; // 配列の長さ int m_length; public: // コンストラクタ CollectionInt(int* array,int length); // デストラクタ ~CollectionInt(); // 最大値の取得 int getMax(); // 最小値の取得 int getMin(); // 成分の表示 void showArray(); }; #endif // _COLLECTIONINT_H_
#include "collectionint.h" #include <iostream> using namespace std; // コンストラクタ CollectionInt::CollectionInt(int* array,int length) { m_pArray = new int[length]; m_length = length; for(int i = 0; i < m_length ; i++){ m_pArray[i] = array[i]; } } // デストラクタ CollectionInt::~CollectionInt() { delete[] m_pArray; } int CollectionInt::getMax() { int max = m_pArray[0]; for(int i = 0; i < m_length ; i++){ if(max < m_pArray[i]){ max = m_pArray[i]; } } return max; } int CollectionInt::getMin() { int min = m_pArray[0]; for(int i = 0; i < m_length ; i++){ if(min > m_pArray[i]){ min = m_pArray[i]; } } return min; } void CollectionInt::showArray(){ for(int i = 0; i < m_length ; i++){ cout << m_pArray[i] << " "; } cout << endl; }
1 5 4 2 3
最大値 : 5
最小値 : 1
期待される実行結果
最大値 : 5
最小値 : 1
実数の場合
1.2 3.5 8.1 4.9 2.0 2.2
最大値 : 8.1
最小値 : 1.2
整数の場合
1 5 4 2 3
最大値 : 5
最小値 : 1
1.2 3.5 8.1 4.9 2.0 2.2
最大値 : 8.1
最小値 : 1.2
整数の場合
1 5 4 2 3
最大値 : 5
最小値 : 1