在向量中的索引处返回元素

Return element at index in a vector

本文关键字:返回 元素 索引 向量      更新时间:2023-10-16

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

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

你可以做:

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

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

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

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

    mVector.erase (mVector.begin()+n);
    
擦除会移动所有元素,

因此,如果您确实擦除中间的元素,则会移动索引。

这是一个用 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;
}