我有一个std::vector<int>,我想删除第n个元素。我怎么做呢?

std::vector<int> vec;

vec.push_back(6);
vec.push_back(-17);
vec.push_back(12);

vec.erase(???);

当前回答

这里还有一种方法,如果你想删除一个元素,通过在vector中找到它的值,你只需要在vector上做这个。

vector<int> ar(n);
ar.erase(remove(ar.begin(), ar.end()), (place your value here from vector array));

它会把你的价值从这里抹去。 谢谢

其他回答

删除带索引的元素:

vec.erase(vec.begin() + index);

删除带值的元素:

vec.erase(find(vec.begin(),vec.end(),value));

最快的方法(对于时间复杂度()=常量的编程竞赛)

可在1秒内擦除100M项目;

    vector<int> it = (vector<int>::iterator) &vec[pos];
    vec.erase(it);

最易读的方式: Vec.erase (vec.begin() + pos);

std::vector上的erase方法重载了,所以调用它可能更清楚

vec.erase(vec.begin() + index);

当你只想擦除一个元素时。

实际上,擦除功能适用于两种配置文件:

删除单个元素 迭代器擦除(迭代器位置); 删除一系列元素 迭代器擦除(迭代器先,迭代器后);

因为std:: vvector .begin()标志着容器的开始,如果我们想删除vector中的第i个元素,我们可以使用:

vec.erase(vec.begin() + index);

如果你仔细观察,vecc .begin()只是一个指向我们的向量的起始位置的指针,并且向它添加i的值将增加指向i位置的指针,因此我们可以通过以下方式访问指向第i个元素的指针:

&vec[i]

所以我们可以这样写:

vec.erase(&vec[i]); // To delete the ith element
template <typename T>
void remove(std::vector<T>& vec, size_t pos)
{
    std::vector<T>::iterator it = vec.begin();
    std::advance(it, pos);
    vec.erase(it);
}