0

があり、std::vectorそこからオブジェクトを削除したいのですが、サイズを変更したくありません。ちょうど空なので、その正確な位置にもう一度埋めることができます。

std::vector<int> vec;

vec.push_back(6);
vec.push_back(-17);
vec.push_back(12);

vec.erase(vec.begin() + 1);

したがって、-17 を削除しますが、位置 1 を別のもので埋めることができます。

4

4 に答える 4

0

いつでも特定の位置に挿入できます

void insert_at(std::vector<int> &v, size_t pos, int val)
{
  //Could make it as template for other vector of objects
   auto it =v.begin();

   if(pos < v.size())
   {
     std::advance(it, pos);

      v.insert(it,val);
   }
   //This function may need some other checks too
} 

vec.erase(vec.begin() + 1)
//...
insert_at(vec,1,100); 
于 2013-10-27T18:40:04.960 に答える
0

vec.erase(vec.begin() + 1)-17 を消去し、後の要素を移動してギャップを埋めます。これと、その位置に要素を挿入すると、その位置に続く要素の数に対して線形のパフォーマンスが得られます。

他の目的に使用しない整数がある場合は、整数の一種として使用できNANます。その場合、vec[1] = NANインデックス 1 の要素を消去し、後で使用するためにギャップを残します。

これらのどちらも受け入れられない場合は、リストやハッシュ マップなどの別のデータ構造を使用してください。

于 2013-10-27T18:32:50.920 に答える
0
std::vector<Obj*> Objects;
Objects.push_back(new Obj);
Objects.push_back(new Obj);

delete Objects[0];
Objects[0] = new Obj;
delete Objects[1];
Objects[1] = new Obj;

for (Obj* it : Objects)
{
    delete it;
}

位置の値を単に置き換えるだけで十分です..

于 2013-10-27T18:41:02.937 に答える