配列を表示できるようにするには、配列に対して独自のストリーム操作を定義する必要があります。
#include <iostream>
#include <vector>
using namespace std;
template <typename T>
class mydata
{
public:
mydata(int size = 0) { for (int i = 0; i < size; i++) add(0); }
~mydata() { }
void add(T x) { data.push_back(x); }
void remove(int pos) { data.erase(data.begin() - pos); }
T& operator[](int pos) { return data[pos]; }
friend ostream& operator<<(ostream& os, const mydata<T>& name) {
for (int i = 0; i < x.data.size(); i++) os << x.data[i] << " "; return os; }
private:
vector<T> data;
};
これは、データをカプセル化するための標準クラスです。あなたができるような操作をしたいのならmydata<int> b(8); b[7] = 8;
。<< 演算子のコードがクラス内にある理由は、テンプレートでは型名固有のコードがテンプレート自体の内部にある必要があるためです。
最後に、これがこのコードの実装方法です。
int main()
{
mydata<char> charData;
mydata<int> intData;
for (int i = 0; i < 20; i++) {
charData.add(65+i);
intData.add(i);
}
cout << charData << endl;
cout << intData;
cin.get();
return 0;
}
出力は次のようになります。
A B C D E F G H I J K L M N O P Q R S T
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19