ベクトルに似たクラスを作成しています。独自のアルゴリズムを使用して、データが実際に保存される場所と方法を決定します。ユーザーの観点からは、通常のベクトルと同じように機能します。
内部的には、重複する値を複数回保存しないことでメモリを節約しようとします。同じ値がベクトルに複数回プッシュされると、インデックスを使用して派手なダンスムーブが実行されますが、実際の値は1回しか保存されません。
operator []をオーバーロードすると、インデックス引数が「実際の」インデックスに変換されるため、データが実際に格納されている場所にアクセスできます。
ユーザーが次のような要素にアクセスしようとした場合:
int i = svec[8];
8を「実際の」インデックスに変換し、正しい要素にアクセスすることで、正しい要素が返されます。
ユーザーが次のような値を割り当てようとすると、問題が発生します。
svec[8] = 1;
値8は再び「実際の」インデックスにカバーされ、要素への参照は。によって返されoperator[]()
ます。ただし、複数のインデックスがその要素にマッピングされている可能性があります。参照を返し、それを変更できるようにすると、他のインデックスの値を変更するという望ましくない副作用が発生します。
要素を値で返すだけでは、operator[]を使用して値を割り当てることはできません。
内operator[]()
で、新しい要素を作成し、インデックスを使用してさらに派手なダンスムーブを実行し、新しい要素への参照を返すことができるように、操作が要素の値を変更する予定があるかどうかを知りたいです。
このようなことは可能ですか?そうでない場合は、値で返すことを余儀なくされているようです。そのため、ユーザーは[]を使用して値を変更できません。