クラスの雛形から色々な型を扱うクラスを作成できる。
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などがある。