程序演示std::set的删除操作
set类模板中,它和vector,list不同。set,map都是关联式容易。set 内部是基于红黑树实现的。插入和删除操作效率比较高。
下面测试一下怎么删除set的里面的元素。
#include<iostream>
#include<set>
void DeleteElement(std::set<int>& vec)
{
std::set<int>::iterator iter = vec.begin();
while(iter != vec.end())
{
if(*iter <= 2)
vec.erase(iter++);
else
iter++;
}
}
void PrintSetVec(const std::set<int>& vec)
{
std::set<int>::iterator iter = vec.begin();
for(; iter != vec.end(); ++iter)
{
std::cerr << *iter << " ";
}
std::cerr << std::endl;
}
int main(int argc, char** argv)
{
std::set<int> vec;
vec.insert(0);
vec.insert(1);
vec.insert(2);
vec.insert(3);
vec.insert(4);
std::set<int>::iterator iter = vec.begin();
while(iter != vec.end())
{
std::cerr << *iter << std::endl;
iter = vec.erase(iter);
}
return 0;
}
其中DeleteElement删除其中的元素。使用的vec.erase(iter++);删除后,iter的迭代器必须指向下一个元素。测试的结果如下:
删除了小于3的元素。
也可以使用其它方法,因为使用vec.erase(iter)会返回一个值,它是指向下一个元素的迭代器。因此删除元素可以使用下面方法。
#include<iostream>
#include<set>
void DeleteElementNew(std::set<int>& vec)
{
std::set<int>::iterator iter = vec.begin();
while(iter != vec.end())
{
if(*iter <= 3)
iter = vec.erase(iter);
else
iter++;
}
}
void PrintSetVec(const std::set<int>& vec)
{
std::set<int>::iterator iter = vec.begin();
for(; iter != vec.end(); ++iter)
{
std::cerr << *iter << " ";
}
std::cerr << std::endl;
}
int main(int argc, char** argv)
{
std::set<int> vec;
vec.insert(0);
vec.insert(1);
vec.insert(2);
vec.insert(3);
vec.insert(4);
PrintSetVec(vec);
DeleteElementNew(vec);
PrintSetVec(vec);
return 0;
}
使用上述的方法,删除元素小于4的元素。得到结果如下: