2012-11-21 29 views
0

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

+0

是否必须按顺序?你可以使用'operator []'或'at()',然后使用'erase()',否则。 – chris

+0

重复? http://stackoverflow.com/questions/39912/how-do-i-remove-an-item-from-a-stl-vector-with-a-certain-value – Beginner

+0

@Beginner,不是真的。它不是按价值搜索,所以使用'remove'有点没有意义。 – chris

回答

5

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

你可以这样做:

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

不过要小心,矢量不善于去除不在矢量结束元素。对于大型矢量这可能是一个昂贵的操作。

+2

'vector:erase'不需要'int'作为擦除线的参数 – Default

+0

,我得到错误“IntelliSense:函数调用中参数太少” – Chin

+0

应该是'myVector.erase(std :: next(myVector。 begin(),index));' – David

3
  1. 要获得元素,你可以使用std::vector::at()

    value = mVector.at(n); 
    
  2. 要删除,std::vector::erase() 下面将删掉的项目没有。 n+1并调整您的矢量。

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

擦除移动的所有元素,因此,指数如果你删除中间的元素。

+0

提问者也想要元素。 –

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