如何从std::vector
删除第i项?
我知道我想删除第i个元素。我有int i; and std::vector<process> pList;
其中process
是一个结构。我想做一些与以下相同的事情:
pList.remove(i);
答案 0 :(得分:80)
这是一个O(1)解决方案,假设您不关心元素的顺序:
#include <algorithm>
// ...
{
using std::swap;
swap(pList[i], pList.back());
pList.pop_back();
}
对于POD,分配比交换更快,因此您应该简单地写:
pList[i] = pList.back();
pList.pop_back();
在C ++ 11中,您可以忘记上述区别并始终使用移动语义来实现最高效率:
if (i != pList.size() - 1)
{
// Beware of move assignment to self
// see http://stackoverflow.com/questions/13127455/
pList[i] = std::move(pList.back());
}
pList.pop_back();
答案 1 :(得分:60)
pList.erase(pList.begin()+i);
删除索引为i的元素。
答案 2 :(得分:10)
由于vector.erase()是线性复杂度,我建议只需将第i个元素与最后一个元素交换,然后然后擦除末尾的元素(实际上是第i个元素);这样,你可以避免线性复杂性。这只是我的想法!
答案 3 :(得分:4)
使用Vector.Erase。复杂性与删除的元素数量(析构函数)加上最后一个元素删除(移动)后的元素数量呈线性关系。
iterator erase ( iterator position );
iterator erase ( iterator first, iterator last );
答案 4 :(得分:3)
vector.erase(iterator)
迭代器是位置。您可以使用vector.begin()获取第一个元素,使用vector.end()获取最后一个元素。只需添加到迭代器即可获得所需的元素。 e.g:
pList.erase(pList.begin()+6);
删除第6项。