gpt4 book ai didi

c++ - 在遍历嵌套 vector 时删除元素

转载 作者:太空宇宙 更新时间:2023-11-04 13:01:13 25 4
gpt4 key购买 nike

我想知道如何在保留迭代器的同时删除 vector 的元素?这里我循环遍历 int 类型 vector 的 vector :

vector< vector<int> >::iterator row;
vector<int>::iterator col;
for (row = vvi.begin(); row != vvi.end(); row++) {
for (col = row->begin(); col != row->end(); col++) {
if(*col==55)
{
// col=row.erase(col); ?
}

}
}

最佳答案

在您的代码中,如果有多个等于 55 的元素,则会有多次删除 vector 元素,这将占用大量开销来移动元素。更好的解决办法是按照erase-remove idiom将所有符合条件的元素移动到 vector 的末尾,然后一次将它们一起删除。例如:

vector< vector<int> >::iterator row;
vector<int>::iterator col;
for (row = vvi.begin(); row != vvi.end(); row++) {
row->erase( std::remove( row->begin(), row->end(), 55), row->end());
}

std::remove 会将所有等于 55 的元素移动到 vector 的末尾并返回它们头部的迭代器。row->erase(iterator1, iterator2) 将删除 2 个迭代器之间的所有元素。

而且您不再需要关心迭代器。

关于c++ - 在遍历嵌套 vector 时删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44149313/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com