如何从中删除第i项std::vector?
我知道我想删除第i个元素.我int i; and std::vector<process> pList;在那里process是一个结构.我想做一些与以下相同的事情:
pList.remove(i);
Run Code Online (Sandbox Code Playgroud)
fre*_*low 81
这是一个O(1)解决方案,假设您不关心元素的顺序:
#include <algorithm>
// ...
{
using std::swap;
swap(pList[i], pList.back());
pList.pop_back();
}
Run Code Online (Sandbox Code Playgroud)
对于POD,赋值比交换更快,所以你应该简单地写:
pList[i] = pList.back();
pList.pop_back();
Run Code Online (Sandbox Code Playgroud)
在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();
Run Code Online (Sandbox Code Playgroud)
Vla*_*mir 60
pList.erase(pList.begin()+i);
Run Code Online (Sandbox Code Playgroud)
删除索引为i的元素.
Naw*_*waz 10
由于vector.erase()是线性复杂度,我建议只需将第i个元素与最后一个元素交换,然后在结尾处删除元素(实际上是第i个元素); 这样,你可以避免线性复杂性.这只是我的想法!
vector.erase(iterator)
Run Code Online (Sandbox Code Playgroud)
其中迭代器是位置。您可以使用 vector.begin() 获取第一个元素,使用 vector.end() 获取最后一个元素。只需添加到迭代器即可到达所需的元素。例如:
pList.erase(pList.begin()+6);
Run Code Online (Sandbox Code Playgroud)
删除第 6 项。