stl在遍历过程中删除元素

// 在遍历过程中删除元素

方法1:

std::list<int> stList;
std::list<int>::iterator it;
for (it = stList.begin(); it != stList.end();)
{
    if (WillDelete(*it))
    {
        it = stList.erase(it); // 通过erase方法的返回值来获取下一个元素的位置
    }
    else
    {
        it++;
    }
}


方法2:(有些容器的erase返回值为void类型)

std::list<int> stList;
std::list<int>::iterator it;
for (it = stList.begin(); it != stList.end();)
{
    if (WillDelete(*it))
    {
        stList.erase(it++); // 这样it是有效的,“先使用再++”相当于使用之前有个备份
    }
    else
    {
        it++;
    }
}


注意:set中的元素可以插入、删除,但是不能修改,需要修改元素的时候不要使用set

你可能感兴趣的:(stl在遍历过程中删除元素)