0

ベクトル内の指定されたインデックスにある要素を削除して、その要素を返すにはどうすればよいですか?そのための方法はありますか?

4

3 に答える 3

5

erase指定されたインデックスの要素を削除できますが、その要素は返されません。

あなたはただ行うことができます:

aboutToBeErased = myVector.at(index);
myVector.erase(myVector.begin() + index);

ただし、ベクトルは、ベクトルの末尾にない要素を削除するのが得意ではないことに注意してください。これは、大きなベクトルの場合、コストのかかる操作になる可能性があります。

于 2012-11-21T19:10:34.353 に答える
3
  1. 要素を取得するには、次を使用できますstd::vector::at()

    value = mVector.at(n);
    
  2. 消去するには、std::vector::erase() 次のように項目番号を消去します。n+1ベクトルのサイズを変更します。

    mVector.erase (mVector.begin()+n);
    

消去はすべての要素をシフトするため、途中で要素を消去するとインデックスがシフトします。

于 2012-11-21T19:09:14.523 に答える
2

以下は、ベクトルから n 番目の要素を取得し、合理的に効率的に消去する C++11 で記述された関数です。

template<typename Vector>
typename Vector::value_type getAndErase( Vector& vec, size_t index )
{
  Assert( index < vec.size() );
  typename Vector::value_type retval = std::move(vec[index]);
  vec.erase( vec.begin()+index );
  return retval;
}
于 2012-11-21T19:16:26.120 に答える