c++ STL vector,list,map的erase用法

vector,内存连续分布,调用erase之后,后面的元素会向前移,导致后面的迭代器全部失效。

正确写法 类似的还有dquue

    std::vector vec_test;
    vec_test.push_back(1);
    vec_test.push_back(2);
    vec_test.push_back(3);

    for(std::vector::iterator iter = vec_test.begin(); iter != vec_test.end();)
    {
        if(2 == *iter)
        {
            iter = vec_test.erase(iter); //返回后一个迭代器
        }
        else
        {
            iter++;
        }
    }

只能用这种方式。

 

list,内存中不是连续分布,删除当前元素,只会当前迭代器失效,会后续没影响

iter=list_test.erase(iter)

list_test.erase(iter++)

两种方式都可以。

 

map,set这种关联容器,C98版本erase返回的是空,C11版本erase返回下一个元素迭代器,erase不会影响后面的迭代器

C98

map_test.erase(iter++)

 

C11

map_test.erase(iter++)

iter = map_test.erase(iter)

两种都可以

 

你可能感兴趣的:(c/c++)