クラスのイテレーターを作成する必要があります。デフォルトでは& arr [i] + 1が安全であることを保証していないはずです(値を返す代わりに、何らかの種類の値を保持する特別なクラスを返さなければならないでしょう)ポインタアクセスのためのオーバーロード、その後のオーバーロード)。
STLが安全を処理する方法は、arr.at(i)などのメンバを使用してイテレータを取得することです。これはデータ型のポインタを保持するクラスですが、イテレータの操作においてある程度の安全性を保証します。
class Array
{
struct Iterator
{
Iterator(Array* array, TYPE* ptr) : m_ptr(ptr) {}
...
Iterator operator +(int i){
if((m_ptr + i) < m_arr->end())
return Iterator(m_arr, m_ptr + i);
}
};
...
Iterator at(unsigned int i) {
if(i < m_size)
return Iterator(this, m_array + i);
}
}
イテレータには、元の配列クラスへのポインタがあることに注意してください。これは、あなたが尋ねたようにイテレータが境界から外れないようにするために必要ですが、STLイテレータはこのように動作しません。代わりに、iterator < array.end()
をチェックして、イテレータがクリエイターについて知る必要がないようにします。何を求めていることなど、少しトリッキーが、いくつかのプロキシオブジェクトを実装することでなんとかです
あなたはあなたの「安全なイテレータ」クラスの一部としてこれを実装する必要があります。 –
'operator []'は、 'operator&'をオーバーロードできるクラス型のオブジェクトを返す必要があります。 –
@thecohenoam:あなたは、生の配列とポインタに使用するのと同じ演算子を使うつもりです。変換演算子を使用して、必要な値に変換することができます。それは完璧ではありませんが、主に動作します。 –