Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用c+从迭代器开始到迭代器之前的一个元素删除集合中的元素+;stl?_C++_Algorithm_Stl_Set_Lower Bound - Fatal编程技术网

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

C++ 如何使用c+从迭代器开始到迭代器之前的一个元素删除集合中的元素+;stl?,c++,algorithm,stl,set,lower-bound,C++,Algorithm,Stl,Set,Lower Bound,我有一套ints作为 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); 设置ds; ds.插入(2); ds.插入(3); ds.插入(4); ds.插入(5); ds.插入

我有一套
int
s作为

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);
设置ds;
ds.插入(2);
ds.插入(3);
ds.插入(4);
ds.插入(5);
ds.插入(6);
ds.插入(7);
ds.插入(8);
set::iterator it=下限(ds.begin(),ds.end(),6);
我想删除2到5

我目前正在尝试执行类似于
ds.erase(ds.begin(),--it)的操作

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

如何用C++ STL实现?< /p>

这里,你是。< /P>

#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;
}

#包括
#包括
#包括
int main()
{
std::set ds={2,3,4,5,6,7,8};
擦除(ds.begin(),std::下限(ds.begin(),ds.end(),6));
对于(intx:ds)std::cout,给您

#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;
}

#包括
#包括
#包括
int main()
{
std::set ds={2,3,4,5,6,7,8};
擦除(ds.begin(),std::下限(ds.begin(),ds.end(),6));

对于(int x:ds)std::coutFirst
指向
6
——它
std::map.erase(First,last)
中更改它
5

迭代器指定要删除的映射容器中的范围:[first,last]。即,该范围包括first和last之间的所有元素,包括first指向的元素,但不是last指向的元素。成员类型iterator和const_iterator是指向元素的双向迭代器类型

因此,您可以简单地使用
it
而不是
--it

ds.erase(ds.begin(),it);

第一个
指向
6
--它
std::map.erase(第一个,最后一个)
中更改它
5

迭代器指定要删除的映射容器中的范围:[first,last]。即,该范围包括first和last之间的所有元素,包括first指向的元素,但不是last指向的元素。成员类型iterator和const_iterator是指向元素的双向迭代器类型

因此,您可以简单地使用
it
而不是
--it

ds.erase(ds.begin(),it);

你真的有
set::iterator it=lower_bound(set.begin(),set.end(),6);
?名称不匹配(
ds
vs
set
)。请将更改后的集合提供给ds。
erase(a,b)
不会擦除
b
它最多会擦除到b。你真的有
set::iterator it=lower_bound(set.begin(),set.end(),6);
?名称不匹配(
ds
vs
set
)。请为ds提供一个已更改的集合。
擦除(a,b)
不会擦除
b
它最多会擦除到b。谢谢。也许我应该先弄清楚我的概念。我没有注意到这个范围的擦除条件。如果没有要擦除的元素,会发生什么?@user3243499因为范围是空的,所以什么也不会发生。只需使用这个调用ds.erase(ds.begin(),std::lower_bound(ds.begin(),ds.end()), 2 ) );在我答案中的演示程序中。是的,谢谢。我刚刚验证了使用你的代码。明白了你的意思。谢谢。谢谢。也许我应该先澄清我的概念。没有注意到这个范围的擦除条件。如果没有要擦除的元素,会发生什么?@user3243499由于范围是空的,所以不会发生任何事情。只需使用这个调用ds.erase(ds.begin(),std::lower_bound(ds.begin(),ds.end(),2));在我的答案中的演示程序中。是的,谢谢。我刚刚用你的代码验证了。明白你的意思了。谢谢。