std::set 的删元素 c++

程序演示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的元素。得到结果如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43851636/article/details/130427011