我一直在阅读有效的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
。