我一直在阅读有效的stl。我被困在这里:

assoccontainer<int> c
for(container<int>::iterator i=c.begin();i!=c.end();++i)
  if(badvalue(*i))
    c.erase(i);


给定代码有什么问题?我不明白那里的解释。

我也有其他问题:


assoccontainer是什么意思?我找不到任何相关文章。
badvalue是某种关键字吗?

最佳答案

关联容器是什么意思?


它表示某种关联容器,例如std::set。请注意,它以斜体打印,这意味着它不是真实代码,而是实际容器类型的占位符。


  “ badvalue”是某种关键字吗?


不,它是程序定义的函数,用于确定是否应从容器中删除一个值。在上一页中进行了介绍,它说:“让我们消除以下谓词返回true的每个对象”。


  给定代码有什么问题


在代码示例之后的书中对此进行了解释。 erase(i)使迭代器无效-这意味着您不能再对其执行任何操作-因此此后立即执行++i会产生不确定的行为。相反,您需要在同一页面的后面使用代码:

for (AssocContainer<int>::iterator i = c.begin(); i != c.end(); /* nothing */) {
    if (badValue(*i)) c.erase(i++);
    else ++i;
}


在擦除并使旧值无效之前,它会递增i

07-28 00:35