如何删除向量中指定索引处的元素,然后返回该元素? 有没有办法呢?
答案 0 :(得分:5)
erase
可以删除指定索引处的元素,但不返回该元素。
你可以这样做:
aboutToBeErased = myVector.at(index);
myVector.erase(myVector.begin() + index);
但要小心,矢量不擅长去除不在矢量末尾的元素。对于大型载体来说,这可能是一项昂贵的操作。
答案 1 :(得分:3)
要获取该元素,您可以使用 std::vector::at()
value = mVector.at(n);
要删除 std::vector::erase()
以下将删除项目号。 n+1
并调整你的矢量大小。
mVector.erase (mVector.begin()+n);
如果删除中间的元素,则擦除所有元素,从而移动索引。
答案 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;
}