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
vsset
)。请将更改后的集合提供给ds。erase(a,b)
不会擦除b
它最多会擦除到b。你真的有set::iterator it=lower_bound(set.begin(),set.end(),6);
?名称不匹配(ds
vsset
)。请为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));在我的答案中的演示程序中。是的,谢谢。我刚刚用你的代码验证了。明白你的意思了。谢谢。