gpt4 book ai didi

c++ - 删除二维 vector 行中的元素 - 使用迭代器

转载 作者:行者123 更新时间:2023-11-28 00:03:04 27 4
gpt4 key购买 nike

我有一个“条目”对象的 7x20 二维 vector 。 Entry 对象有一个 ID。我想遍历我的 vector 并执行:

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 返回一个无符号字符,它是 1 到 70 之间的某个值。

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

最佳答案

C++ 没有在 vector 中“删除一个值”的函数,因为它可以通过两个更基本的步骤完成,通常称为 erase-remove idiom :

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

请注意,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,因此这些更改实际上影响的是真实的一天,而不是拷贝。

关于c++ - 删除二维 vector 行中的元素 - 使用迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37465332/

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