3

コレクションのサブセットへの参照があることについて簡単な質問があります。オブジェクトのベクトルがあると考えてください。ここで、このベクトルのサブセットである別のベクトルを作成したいのですが、オブジェクトのサブセットのコピーを作成したくありません。

私が考えていた方法の1つは、を作成することvector<auto_ptr<MyClass> >です。これは良いアプローチですか?この場合、他のコンテナ、イディオム、またはパターンが役立つと思われるかどうかを提案してください。ありがとうございました

4

4 に答える 4

7

いいえ !参照 :なぜ std::auto_ptr<> を STL コンテナーで使用するのが間違っているのですか?

現在、代わりに、生のポインターを保存するかboost::shared_ptr、必要に応じて保存することができます。

于 2010-12-21T16:47:39.843 に答える
2

もう1つの、おそらくより多くのSTLの方法は、1つのベクトルだけを持ち、イテレーターのペアを使用してサブ範囲を追跡することです(すべてのアルゴリズムがまさにこの理由でイテレーターを使用することに注意してください)

于 2010-12-21T17:16:15.050 に答える
0

インデックスのベクトルを使用できます: vector<int>(またはvector<size_t>、衒学的になりたい場合)。含まれているベクトルが定数でない場合、これはポインター (一般的な意味でのポインター: 生の C/C++ ポインター、、、など) を格納するよりも優れてshared_ptriteratorます。

次のシナリオを考えてみましょう。「大きな」ベクトルにはリンゴ、オレンジ、レモンが含まれ、「小さな」ベクトルにはリンゴへのポインタが含まれます。大きなベクターに他の果物をたくさん追加すると、STL はベクターのストレージを再割り当てするため、リンゴへのポインターは無効になります (解放されたメモリを指します)。

上記のシナリオが可能な場合は、インデックスのベクトルを使用してください。それが不可能な場合は、他の手法を使用してください (たとえば、生のポインターのベクトル、またはオブジェクトのコピーのベクトル)。

于 2010-12-21T17:41:47.173 に答える
0

サブセクションが連続している場合は、反復子と、参照しているアイテムの数を示すカウントを使用して、サブセクションを参照できます。

これを行うための適切な方法は、コンテナ参照と 2 つのインデックスを使用して構築できるある種のテンプレート化されたクラスを作成し、クラスにすべての境界とエラー チェックを行わせることですが、どのようにできるかはわかりません。基になるコンテナーが後でまだ存在しているかどうかを確認するには...

于 2016-03-02T11:03:00.150 に答える