0

我有一个“条目”对象的 7x20 2D 矢量。Entry 对象有一个 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),但我得到一个错误,因为没有找到在方括号中使用迭代器的运算符。

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

getID 返回一个 unsigned char,它是 1 到 70 之间的某个值。

这是我传入一个我希望删除的 ID 的函数的一部分。然后我遍历寄存器,并删除具有该 ID 的任何条目。

4

1 回答 1

3

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通过引用获取,因此更改实际上会影响真实的一天而不是副本。

于 2016-05-26T15:58:35.817 回答