2

次のプロパティを持つメソッドからを返したいstd::vector:レシーバー(ユーザー)はベクター内の要素を編集できますが、ベクター自体を変更することはできません(サイズ変更、削除、追加など)。

  • を返すstd::vector<T>&と、レシーバーはサイズを変更したり、要素を追加したりできるようになります。
  • (私はその権利を宣言しましたか?)を返すとstd::vector<T> const&、要素を変更できなくなります。
  • を返すstd::vector<T>と、まったく新しいベクトルになり、要素への変更は元のベクトルにはなりません。

これを行う方法はありますか?たぶん、const(std::vector<T&> const)として返される参照のベクトル?そんなこともありますか?そして、もしあれば、それは暗黙のうちに私std::vector<T>をそれに変換することができますか?

4

3 に答える 3

6

参照によってベクトルを返す機能があるように見えるので、代わりにそのベクトルの最初と最後にイテレータを返すことができます。イテレータを使用すると、ユーザーは任意のベクターメンバーを編集できますが、ベクター自体がないと追加または削除できません。

インデックス(場合によってはオーバーロード)を使用してランダムアクセスを提供する関数を提供することもできますoperator[]

于 2012-10-31T10:10:54.747 に答える
2

ベクトルのプロパティが必要ない場合は、ベクトルを返さないでください。必要なプロパティを持つクラスを設計します。適切な場合は、ベクターを使用して実装してください。ベクトルはツールであり、それ自体が目的ではありません。

于 2012-10-31T11:02:38.840 に答える
0
// vector of pointers to elements by value
std::vector<T*>
// reference to const vector of pointers to elements
std::vector<T*> const&
// shared pointer of to const vector of pointers to elements
std::shared_ptr<std::vector<T*> const>

// vector of shared pointers to elements by value
std::vector<std::shared_ptr<T> >
// reference to const vector of shared pointers to elements
std::vector<std::shared_ptr<T> > const&
// shared pointer of to const vector of shared pointers to elements
std::shared_ptr<std::vector<std::shared_ptr<T> > const>
于 2012-10-31T10:20:05.973 に答える