返回向量中索引处的元素

时间:2012-11-21 19:07:05

标签: c++

如何删除向量中指定索引处的元素,然后返回该元素? 有没有办法呢?

3 个答案:

答案 0 :(得分:5)

erase可以删除指定索引处的元素,但不返回该元素。

你可以这样做:

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

但要小心,矢量不擅长去除不在矢量末尾的元素。对于大型载体来说,这可能是一项昂贵的操作。

答案 1 :(得分:3)

  1. 要获取该元素,您可以使用 std::vector::at()

    value = mVector.at(n);
    
  2. 要删除 std::vector::erase() 以下将删除项目号。 n+1并调整你的矢量大小。

    mVector.erase (mVector.begin()+n);
    
  3. 如果删除中间的元素,则擦除所有元素,从而移动索引。

答案 2 :(得分:2)

这是一个用C ++ 11编写的函数,它将从向量中获取第n个元素并合理有效地擦除它:

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;
}