C++では、どのようにして要素をベクトルから削除できますか?Vectorからの要素の消去
- すなわちベクトル要素が最後の要素S。T.で削除する
- スワップサイズを変更させ、右のそれがどこから削除
(1)については、私は次のことを試してみましたが、それが何をしているかはわかりません(removeItem()に渡された項目を削除)を行うことになっている、それは非常にエレガントでいないようです:erase
が何をするかだ
vector<Item*> items;
// fill vector with lots of pointers to item objects (...)
void removeItem(Item * item) {
// release item from memory
if (int i = getItemIdIfExists(item) != -1) {
items.erase (items.begin()+i);
}
}
int getItemIdIfExists(Item * item) {
// Get id of passed-in Item in collection
for (unsigned int i=0; i<items.size(); i++) {
// if match found
if (items[i] == item) return i;
}
// if no match found
return -1;
}
ありがとう、それは私の問題を解決します。また、1つの要素だけを削除します(これは私が望むものです)。何らかの理由で私自身のコードが複数の要素を削除したようです。セットに関しては、なぜ私はそれを使用するのかよく分かりません!この特定の場合を除いて、私のアクセスは主に順次です(つまり、すべての項目が更新され、すべての項目がレンダリングされます)。 – Ben
どのように使用しているのかわかりませんでしたので、セットからアイテムを削除する方がベクトルよりも速くなると考えていました(ベクトル全体をシフトしていなくても、私の 'removeItem ')、しかしあなたがあまりにも多くの削除をしない場合は、ベクトルでうまくいくはずです。 – Vlad
さて、 'items'はゲーム内のコレクタブルなので、フレームごとに順次更新され、レンダリングされますが、実際に収集されるたびに削除されます。だから私は、ベクトルはこの場合には良い選択だと思います。 – Ben