Rso's Jotter

日々の開発の知見のメモやその他雑記

C++練習

テンプレートの練習がてら配列からモード(最頻値)を返すプログラム作ってみた
テンプレート使った汎用関数さえ定義すれば
後はどんな型の引数でも対応できるっていうのは便利なもんですな

#include<iostream>

template <class X> X modo(X* start,int size) //モードを求める
{

	int max=0,cnt=0,index;

	for(int j=0;j<size;j++,cnt=0)
	{
		for(int i=j;i<size;i++)
		{
			if(start[j] == start[i])
				cnt++;
		}
		if(max < cnt){
			max = cnt;
			index = j;
		}
	}
	return start[index];
}

int main(){

	int a[] = {1,32,3,3,2,3,4,23,4};
	char b[] = {'a','b','b'};
	double c[] = {1.1,1.1,1.2,1.0};

	std::cout << modo(a,10)<< std::endl;  //int型バージョン
	std::cout << modo(b,3)<< std::endl;   //char型バージョン
	std::cout << modo(c,4)<< std::endl;   //double型バージョン

	return 0;
}