[C++] テンプレートクラス, STL vector

クラスの雛形から色々な型を扱うクラスを作成できる。

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などがある。