は固定されていない大きさであるので、その中に要素がない場合、size
は0
を返し、空であろうtrue
を返します。
std::vector<int> v;
auto sz = v.size(); // sz has value 0
auto e = v.empty(); // true
v.push_back(42);
sz = v.size(); // 1
e = v.emi empty(); // false
あなたはまた、
std::vector<int> v { 1, 2, 3 };
auto it = v.find(2);
if (it != v.end())
v.erase(it); // v now contains 1, 3
ので、理論的には、ありませんあなたがnullptr
Sを配置する必要はありません(ベクトルがギャップを埋めるために、すべてのfollowingv要素を下に移動)の要素を削除することができますベクター。これは、ベクター内の特定の母集団サイズを必要としない方法でアプリケーションを設計したことを前提としています。もしそうなら、ベクトルは正しいコンテナではないかもしれません。 std :: arrayを考えてみましょう。
レンダラブルベクタには問題があります。ベクタは、のRenderable
のベクタを格納します。私がベクトルである要素は、Renderableのサイズとまったく同じです。そのため、派生クラスを試して保存すると、たとえばMesh
のように、派生クラスの余分なフィールドは失われます。
これはスライシングと呼ばれます。https://en.m.wikipedia.org/wiki/Object_slicing
あなたがオブジェクトのインスタンスへのポインタまたは参照を格納する必要があります。インスタンスの存続期間と所有権によって異なります。
あなたのベクトルがremediablesを所有している場合は、std::vector<std::unique_pre<Remediable>>
を使用することができます。
あなたはおそらくstd::shared_ptr
、あなたの発信者からのインスタンスを与えられている場合。
サブ構造がない場合は、* anything *をベクターに入れません。 – Galik
あなたのグラフでヌルポインタが適切かどうかを尋ねなければならない場合は、悪い時が来るでしょう。 –