我正在查看STL vector的API文档,注意到vector类中没有允许移除某个特定值元素的方法。这似乎是一种常见操作,也很奇怪为什么没有内置方法可以实现这个功能。
我正在查看STL vector的API文档,注意到vector类中没有允许移除某个特定值元素的方法。这似乎是一种常见操作,也很奇怪为什么没有内置方法可以实现这个功能。
类似于erase remove idiom,对于vector
,可以使用resize
和remove
,并使用迭代器距离计算:
std::vector<int> vec;
// .. put in some values ..
int int_to_remove = n;
vec.resize(std::remove(vec.begin(), vec.end(), int_to_remove) - vec.begin());
已测试此处。
如果您想在不添加任何额外文件的情况下完成这个任务:
vector<IComponent*> myComponents; //assume it has items in it already.
void RemoveComponent(IComponent* componentToRemove)
{
IComponent* juggler;
if (componentToRemove != NULL)
{
for (int currComponentIndex = 0; currComponentIndex < myComponents.size(); currComponentIndex++)
{
if (componentToRemove == myComponents[currComponentIndex])
{
//Since we don't care about order, swap with the last element, then delete it.
juggler = myComponents[currComponentIndex];
myComponents[currComponentIndex] = myComponents[myComponents.size() - 1];
myComponents[myComponents.size() - 1] = juggler;
//Remove it from memory and let the vector know too.
myComponents.pop_back();
delete juggler;
}
}
}
}