問題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









