ぼくがかんがえたさいこうのはいれつ2

割と経験があり、STL?って思っているようなプログラマが書きそうなArray。
std::vectorはメモリの確保に倍に近くなるようなサイズで保持領域を増やすため、
ページサイズを指定して、その単位のサイズだけ常に伸びるようになっている。
operatorなどの便利メソッドは散見されるが、
それでもまだイミフなものがないだけまし。
このテンプレートは値型とポインタ型を別テンプレートでまとめようとしている例でこれは値版。
ポインタに対してはPointerArrayを用意する。
個人的にはこの先にSTLに回帰するのではないかと思う。

実在のプログラマとは一切関係がありません。

template <class T> class Array
{
public:
	Array<T>();						// コンストラクタ
	~Array<T>();						// デストラクタ
	Array<T>(const Array<T> &other);	// コピーコンストラクタ
	void Release();		// データ解放	
	void ReserveBuffer( int iNewBufferSize );		// バッファサイズ調節
	void Add( const T &other);	// データ追加
	void Add( const Array<T> &other );	// 領域追加
	void Insert( const T &other ,int index );	// データ挿入
	void Remove( int index );						// データ削除
	void Push( const T &other );					// データプッシュ
	T Pop();													// データポップ
	void SetSize( int iSize );							// サイズセット
	int GetSize() const;								// サイズ取得
	int GetByteSize() const;							// byteサイズ取得
	void SetPageSize( int iPageSize );			// ページサイズをセット
	int GetPageSize() const;						// ページサイズを取得
	T& At( int index );									// データ参照
	const T& At( int index ) const;				// データ参照
	T& GetAt( int index );							// データ参照
	const T& GetAt( int index ) const;			// データ参照
	T& operator[](int index );						// データ参照
	const T& operator[](int index ) const;	// データ参照
	Array<T>& operator+=(const T &other );						// データ追加
	Array<T>& operator+=(const Array<T> &other )	;	// ベクトル追加
	Array<T>& operator=(const Array<T> &other);		// コピー
};