在循环内使用 list.push_back(),绕过使迭代器无效

use list.push_back() inside loop, get around invalidate iterator

备注:

for ( it2=lst.begin();it2 != lst.end();it2++) {
    //test on *it2
    myclass *newobj = new myclass();
    lst.push_back(newobj);
    //infinite loop here in second loop
}

这是一个无限循环,因为"next" link来自节点it2的跟踪将连接到新节点,然后迭代器移动到刚刚插入的节点并且你一次又一次地做.....你可以在之前递增it2 push_back,然后用end()记录相等性, after 如果 push_back 相等,break 退出循环。请记住从 for 语句中删除 ++it2 否则您将处理交替元素(并且可能会尝试以 未定义的行为 超越 end() ).

您可以使用相同的见解来确定是否需要为外循环做些事情。