クラスの雛形から色々な型を扱うクラスを作成できる。
template <class T>
class Array {
private:
T data[5];
public:
void setData(int num, T d);
T getData(int num);
};
template <class T>
void Array<T>::setData(int num, T d){
if ( num < 0 || num > 4)
cout << "配列の範囲を超えています。\n";
else
data[num] = d;
}
template <class T>
T Array<T>::getData(int num){
if (num < 0 || num > 4){
cout << "配列の範囲を超えています\n";
return data[0];
}
else
return data[num];
}
int main() {
cout << "int型の配列を作成します\n";
Array<int> i_array;
i_array.setData(0, 80);
i_array.setData(1, 60);
i_array.setData(2, 58);
i_array.setData(3, 77);
i_array.setData(4, 57);
for(int i=0; i<5; i++)
cout << i_array.getData(i) << '\n';
cout << "double型の配列を作成します。\n";
Array<double> d_array;
d_array.setData(0, 35.5);
d_array.setData(1, 45.6);
d_array.setData(2, 26.8);
d_array.setData(3, 76.2);
d_array.setData(4, 85.5);
for (int j=0; j<5; j++)
cout << d_array.getData(j) << '\n';
return 0;
}
C++では standard template libraryをSTLと呼ぶ
vectorは数が決まっていない複数のデータを管理できる構造
#include <iostream>
#include <vector>
using namespace std;
int main() {
int num;
vector<int> vt;
cout << "幾つ整数データを入力しますか?\n";
cin >> num;
for(int i=0; i<num; i++){
int data;
cout << "整数を入力してください。\n";
cin >> data;
vt.push_back(data);
}
cout << "表示します。\n";
vector<int>::iterator it = vt.begin();
while(it != vt.end()){
cout << *it;
cout << "-";
it++;
}
cout << "\n";
return 0;
}
vt.begin(), vt.end()で先頭・末尾のデータを知ることができる
### STLによるアルゴリズム
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector<int> vt;
for(int i=0; i<10; i++){
vt.push_back(i);
}
cout << "並び替え前は";
vector<int>::iterator it = vt.begin();
while(it != vt.end()){
cout << *it;
it++;
}
cout << "です。\n";
cout << "逆順にすると";
reverse(vt.begin(), vt.end());
it = vt.begin();
while(it != vt.end()){
cout << *it;
it++;
}
cout << "です。\n";
cout << "並び替え後は";
sort(vt.begin(), vt.end());
it = vt.begin();
while(it != vt.end()){
cout << *it;
it++;
}
cout << "です。\n";
return 0;
}
主なアルゴリズムにはcount, find, reverse, replace, remove, merge, sort, searchなどがある。