删除 2D 矢量行中的元素 - 使用迭代器
Deleting element in row of 2D Vector - With Iterators
>我有一个"入口"对象的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++在
向量中没有"删除值"函数,因为它可以通过两个更基本的步骤来完成,通常称为擦除-删除习惯法:
- 找到向量中等于该值的所有项,并使用
std::remove
或remove_if
将它们交换到向量的末尾 - 使用
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
,因此更改实际上会影响实际日期而不是副本。
相关文章:
- 对于set上的循环-获取next元素迭代器
- 访问要输出的矢量迭代器元素
- 为什么这个程序没有打印返回的迭代器的正确第二个元素?
- C++如何乘以包含 std::variant 元素的向量的迭代器?正在执行迭代器类型的转换?
- 调用 erase() 函数是否也会在擦除元素之前更改迭代器值?
- 为什么 min_element() 返回最小元素的索引,而不是迭代器?
- 如何通过查找迭代器结果分配给一组对的元素
- C++:在进行切片时对迭代器的约定,特别是对于访问最后一个元素并最终将其删除
- 将迭代器作为 3 个元素的滑动窗口,可以超调边界(可能使用 Boost)
- C++链表最后一个元素的迭代器?
- 使用索引与迭代器将向量迭代到倒数第二个元素
- 提升堆元素句柄比较和 MSVC 迭代器调试工具
- 如果我有一个指向矢量元素的指针,而不是迭代器,如何删除它?
- 使用迭代器打印矢量元素
- C++ std::vector语言 - 如何修改迭代器指定的元素?
- 你能pop_back一个向量,并且仍然使用迭代器到最后一个元素吗?
- 优先级队列(使用 pairs<int,int> ) 根据 for 循环迭代器的顶级元素
- C++ 当容器在使用前被破坏/修改时发出警告(通过引用元素或迭代器使用)
- 无法将 std::set 中的元素迭代器插入到 std::list
- 使用std :: remove_reference获取STL容器的元素迭代器