vector<node>::iterator it;
for(it;it!=vector_of_node.end();it++){
if(it->get_name()=="MARIA"){
vector_of_node.erase(it);
}
我希望我的代码目标明确。我想从 vector (在本例中为 vector_of_nodes)中消除多个对象(在称为节点的类中描述)。 当我运行我的代码时,我没有从编译器那里得到任何错误,但是我在它运行时失败了。我确定错误出在我共享的这部分代码上。你能帮帮我吗?
最佳答案
通过一次删除一个对象来消除 vector 中的多个对象是非常低效的。每次 erase
调用都会将右侧的所有元素移动一个位置。已经有一个标准库模式可以更好地做到这一点,使用 std::remove
:
std::erase(std::remove_if(vector_of_node.begin(),
vector_of_node.end(),
[](const node& n) { return n->get_name() == "MARIA"; }),
vector_of_node.end());
std::remove_if
的结果是重新排列的 vector ,所有匹配都移到了末尾,它返回一个指向第一个匹配的迭代器。然后调用 std::erase
将它们全部删除。
关于c++ - 在 for 循环中调用一个函数来删除 vector (或列表)中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59163715/