64,654
社区成员
发帖
与我相关
我的任务
分享
//第一种
AssocContainer<int> c;
...
for (AssocContainer<int>::iterator i = c.begin(); i != c.end();)
{
if (badValue(*i))
c.erase(i++); // 对于坏的值,把当前的
else
++i; // i传给erase,然后
} // 作为副作用增加i;对于好的值,只增加i
//第二种
AssocContainer<int> c;
...
for (AssocContainer<int>::iterator i = c.begin(); i != c.end();)
{
AssocContainer<int>::iterator iTemp = i++;
if (badValue(*i))
c.erase(i); // 对于坏的值,把当前的
}
//第一种
AssocContainer<int> c;
...
for (AssocContainer<int>::iterator iter = c.begin(); iter != c.end();)
{
if (badValue(*iter))
c.erase(iter++); // 我同事的意思是,这里i是先被erase的,
//关联容器这个i是不是在erase之
//后被释放呢?然后才执行的自增,如果i已经失效,
//则有可能导致崩溃,如果
//不崩溃,则是没失效,具体估计就得开代码实现了
else
++i;
}
//第二种
AssocContainer<int> c;
// 我这里就表示是关联容器了,顺序是用erase的 返回值
...
for (AssocContainer<int>::iterator iter = c.begin(); iter != c.end();)
{
AssocContainer<int>::iterator itTemp = iter++; // iter与此处完成自增
if (badValue(*itTemp ))
c.erase(itTemp ); // 这里的i应该是itTemp
}
AssocContainer<int>::iterator remove_end = remove_if(c.begin(), c.end(), [](int elm){return badValue(elm);});
c.erase(remove_end, c.end());