栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

C++——顺序容器的删除

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++——顺序容器的删除

删除单个元素:

list lst = {0,1,2,3,4,5,6,7,8,9};
auto it = lst.begin();
while(it != lst.end())
    if (*it % 2)            //若元素为奇数
        it = lst.erase(it); //删除此元素
    else
        ++it;

成员函数erase从容器中指定位置删除元素,在上面的程序中,每个循环步中,首先检查当前元素是否是奇数,如果是就删除该元素,并将it设置为我们所删除元素之后的元素,如果*it为偶数,将it递增,从而在下一步循环检查下一个元素。

删除多个元素:

elem1 = slist.erase(elem1, elem2); // 调用后, elem1 == elem2
// 删除两个迭代器表示的范围内的元素
// 返回指向最后一个被删元素之后位置的迭代器

迭代器elem1指向我们要删除的第一个元素,elem2指向我们要删除的最后一个元素之后的位置。

在删除一个容器的中所有元素的时候,我们既可以调用clear,也可以用begin和end获得的迭代器作为参数调用erase:

slist.clear(); //删除容器中的所有元素
slist.erase(slist.begin(), slist.end()); //与上面等价

当在forward_list中添加或删除元素时,必须关注两个迭代器——指向处理元素的迭代器,指向处理元素前驱的迭代器。

forward_list flst = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
auto prev = flst.before_begin();
auto curr = flst.begin();
while (curr != flst.end()) {
    if (*curr % 2)
        curr = flst.erase_after(prev);
    else {
        prev = curr;    // 移动迭代器curr,指向下一个元素,prev指向curr之前的元素
        ++curr;
    }
}

        要注意向容器中添加元素和从容器中删除元素的操作可能会使指向容器元素的指针、引用或迭代器失效。使用这种失效指针、引用、迭代器是严重的程序设计错误。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/746802.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号