1

これは重複した質問のように見えるかもしれませんが、そうではありません。関数に問題があり、なぜそのように動作するのかわかりません。

タイプ MyMaterial** (std::vector) の要素を保持するベクトルがあります。プログラムのある時点で、"currentElement" という要素を認識し、それを削除したいと思うでしょう。

私はこれをやってみました:

myMaterials.erase(currentElement);

しかし、ここに問題があります。「currentElement」を削除するだけでなく、その後に追加されたすべての要素も削除します。なぜそれが行われ、どうすれば解決できますか?

ベクトル内の「currentElement」の位置がわからないので、検索したくありません。別の方法があることを願っています。

4

3 に答える 3

0

ベクトルが保持する要素のタイプが原因で、あらゆる種類のエラーが発生したため、上記の例を実際に使用できませんでした。しかし、特定の要素を削除する関数を作成しました:

int i=0;
int found=0;

MyMaterial **material = gMaterials.begin();
while(material != gMaterials.end() && found == 0)
{
  if(currentElement == material)
  {
    gMaterials.erase(gMaterials.begin() + i, gMaterials.begin() + i+1);
    found = 1;
  }
  i++;
  cloth++;
}

それがどれほど良い/正しいかはわかりませんが、仕事はします。

提案と助けをありがとう。

于 2013-05-31T18:44:31.280 に答える
0

std::vector を使用している場合は、次のようになります。

要素を消去 ベクトルから単一の要素 (位置) または要素の範囲 ([first,last)) を削除します。

多分あなたはこのようなものを探しています:

特定の値を持つ stl ベクトルから項目を削除するにはどうすればよいですか?

于 2013-05-31T17:55:07.773 に答える