删除 2D 矢量行中的元素 - 使用迭代器

Deleting element in row of 2D Vector - With Iterators

本文关键字:元素 迭代器 2D 删除      更新时间:2023-10-16

>我有一个"入口"对象的7x20 2D向量。条目对象具有 ID。我想遍历我的向量并执行以下操作:

if( idToDelete == entry.getID() )
    //Delete entry

目前代码如下所示:

for(auto day : entryRegister)
{
    for(auto entry : day)
    {
        if(entryID == entry.getID())
        {
            //Delete Entry
        }
    }
}

我不确定如何制定表达式以实际删除项目。我试过做entryRegister[day].erase(entry)但出现错误,因为找不到在方括号中接受迭代器的运算符。

我看到了申报入境登记的请求。相关信息只是这样声明:vector< vector<Entry> > 并有 7 个列,每个列最多 20 行。

getID 返回一个无符号字符,该字符的值介于 1 和 70 之间。

这是我传入要删除的 ID 的函数的一部分。然后,我循环访问寄存器,并删除具有该 ID 的任何条目。

C++在

向量中没有"删除值"函数,因为它可以通过两个更基本的步骤来完成,通常称为擦除-删除习惯法:

  1. 找到向量中等于该值的所有项,并使用std::removeremove_if将它们交换到向量的末尾
  2. 使用std::vector::erase调整矢量大小以删除找到的项目

请注意,erase需要一个或两个迭代器。它仅支持擦除您已经知道该位置的项目。

for (auto& day : entryRegister) {
    auto erase_begin = std::remove_if(
                day.begin(),
                day.end(),
                [=](const Entry& entry) { return entry.EntryID() == entryID; }
    );
    day.erase(erase_begin, day.end());
}

请注意,我更改了entryRegister循环以通过引用获取day,因此更改实际上会影响实际日期而不是副本。