【VC++】関数テンプレートを利用する
<機能>
(1)関数テンプレートを利用してint/std::string型の配列をvectorに設定する
(2)vector(動的配列)を昇順でソートして返す
(3)std::coutで結果を出力する
<動作検証&開発環境>
Visual Studio Community 2019
Version16.1.1
<イメージ>
<使い方>
Windowsデスクトップウィザードでプロジェクトを作成する
コンソールアプリケーション(.exe)を指定する
ソースを追加する
#include <iostream>
#include <vector>
#include <algorithm>
#include <algorithm>
//関数テンプレートを利用する
template<typename T> void MakeArrayAndSort(std::vector<T>* myArray, T myData[], int count);
template<typename T> void MakeArrayAndSort(std::vector<T>* myArray, T myData[], int count);
int main()
{
//出力文字列
std::string str("");
{
//出力文字列
std::string str("");
//テンプレートの型がintのとき
int arrayInt[] = { 9,12,5,20,1 };
std::vector<int> myIntArray;
int arrayInt[] = { 9,12,5,20,1 };
std::vector<int> myIntArray;
//テンプレート関数を呼び出し、vectorに格納して昇順でソート
MakeArrayAndSort<int>(&myIntArray,arrayInt,5);
for (auto itr = myIntArray.begin(); itr != myIntArray.end(); ++itr)
{
char buf[512];
memset(&buf, 0x0,sizeof(buf));
sprintf_s(buf, "%d ", *itr);
str.append(buf);
}
str.append("¥r¥n");
MakeArrayAndSort<int>(&myIntArray,arrayInt,5);
for (auto itr = myIntArray.begin(); itr != myIntArray.end(); ++itr)
{
char buf[512];
memset(&buf, 0x0,sizeof(buf));
sprintf_s(buf, "%d ", *itr);
str.append(buf);
}
str.append("¥r¥n");
//テンプレートの型がstd::stringのとき
std::string arrayString[] = {"Willson","Johnson","Smith","Davis","Brown"};
std::vector<std::string> myStringArray;
std::string arrayString[] = {"Willson","Johnson","Smith","Davis","Brown"};
std::vector<std::string> myStringArray;
//テンプレート関数を呼び出し、vectorに格納して昇順でソート
MakeArrayAndSort<std::string>(&myStringArray, arrayString, 5);
for (auto itr = myStringArray.begin(); itr != myStringArray.end(); ++itr)
{
str.append(*itr + " ");
}
MakeArrayAndSort<std::string>(&myStringArray, arrayString, 5);
for (auto itr = myStringArray.begin(); itr != myStringArray.end(); ++itr)
{
str.append(*itr + " ");
}
//結果を出力
std::cout << str << "¥r¥n";
}
std::cout << str << "¥r¥n";
}
/******************************************************
配列をvectorに格納、ソートして返す
myArray:格納先vector(動的配列)
myData :格納するデータ(ソート前)
count :データの要素数
******************************************************/
template<typename T> void MakeArrayAndSort(std::vector<T>* myArray,T myData[],int count)
{
for (int i = 0; i < count; i++)
{
myArray->push_back(myData[i]);
}
//降順でソートするときはgreaterを指定
//std::sort(myArray->begin(), myArray->end(), std::greater<T>());
//昇順でソート
std::sort(myArray->begin(), myArray->end(), std::less<T>());
}
配列をvectorに格納、ソートして返す
myArray:格納先vector(動的配列)
myData :格納するデータ(ソート前)
count :データの要素数
******************************************************/
template<typename T> void MakeArrayAndSort(std::vector<T>* myArray,T myData[],int count)
{
for (int i = 0; i < count; i++)
{
myArray->push_back(myData[i]);
}
//降順でソートするときはgreaterを指定
//std::sort(myArray->begin(), myArray->end(), std::greater<T>());
//昇順でソート
std::sort(myArray->begin(), myArray->end(), std::less<T>());
}
よろしければポチッと押してください