在C++中,如何从向量中删除元素?
- 从原来的位置删除它,即让向量调整大小
- 将要删除的元素与最后一个元素 s.t 交换。可以使用 pop_back() (我希望这不会涉及复制周围的所有内容......)
对于(1),我尝试了以下操作,但我不太确定它是否做了它应该做的事情(删除传递给removeItem()的项目),而且它看起来不太优雅:
vector<Item*> items;
// fill vector with lots of pointers to item objects (...)
void removeItem(Item * item) {
// release item from memory
if (int i = getItemIdIfExists(item) != -1) {
items.erase (items.begin()+i);
}
}
int getItemIdIfExists(Item * item) {
// Get id of passed-in Item in collection
for (unsigned int i=0; i<items.size(); i++) {
// if match found
if (items[i] == item) return i;
}
// if no match found
return -1;
}
标准删除+擦除习惯用法按值删除元素:
#include <vector>
#include <algorithm>
std::vector<int> v;
v.erase(std::remove(v.begin(), v.end(), 12), v.end());
remove
重新排序元素,使所有被擦除的元素都位于末尾,并返回一个迭代器到被擦除范围的开头,并且erase
实际上从容器中删除元素。
这与使用连续存储容器(如vector
,特别是如果您有多个具有相同值的元素,并且一次清洗后所有元素都会被删除。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)