如何使用c ++ stl删除迭代器中从开头到一个元素的集合中的元素?

问题描述 投票:0回答:2

我有一个setints

set<int> ds;
ds.insert(2); 
ds.insert(3);
ds.insert(4);
ds.insert(5);
ds.insert(6);
ds.insert(7);
ds.insert(8);

set<int>::iterator it = lower_bound(ds.begin(), ds.end(), 6);

我想删除2到5。

我正在尝试像ds.erase(ds.begin(), --it);那样做

但是代码冻结了,并没有进一步发展。此外,如果迭代器位置之前没有元素,我不想删除任何内容。

如何使用c ++ STL实现它?

c++ algorithm stl set lower-bound
2个回答
4
投票

这个给你。

#include <iostream>
#include <set>

int main() 
{
    std::set<int> ds = { 2, 3, 4, 5, 6, 7, 8 };

    ds.erase( ds.begin(), ds.lower_bound( 6 ) );

    for ( int x : ds ) std::cout << x << ' ';
    std::cout << std::endl;

    return 0;
}

程序输出是

6 7 8 

要么

#include <iostream>
#include <set>
#include <algorithm>

int main() 
{
    std::set<int> ds = { 2, 3, 4, 5, 6, 7, 8 };

    ds.erase( ds.begin(), std::lower_bound( ds.begin(), ds.end(), 6 ) );

    for ( int x : ds ) std::cout << x << ' ';
    std::cout << std::endl;

    return 0;
}

输出与上面显示的相同。


1
投票

第一个it指向6--it改变它5。在std::map.erase(first, last)

迭代器指定要删除的地图容器中的范围:[first,last)。即,范围包括first和last之间的所有元素,包括first指向的元素,而不是last指向的元素.Member类型iterator和const_iterator是指向元素的双向迭代器类型。

所以你可以简单地使用it而不是--it

ds.erase(ds.begin(),it);
© www.soinside.com 2019 - 2024. All rights reserved.