set容器运用迭代器删除数据

img


#include<set>
#include<algorithm>
#include<iostream>
using namespace std;

void myPrint(char c)
{
    cout << c << " ";
}
int main()
{
    set<char>s1;
    for (int i = 97; i < 107; i++)
    {
        s1.insert((char)i);
    }
    if (!s1.empty())
    {
        cout << "容器不为空" << endl;
        cout << "容器的大小是" << endl << s1.size() << endl;
        for_each(s1.begin(), s1.end(), myPrint); cout << endl;
    }
    else
        cout << "容器为空" << endl;

    set<char>s2;
    for (int i = 65; i < 73; i++)
    {
        s2.insert((char)i);
    }


    cout << "容器交换前" << endl;
    for_each(s1.begin(), s1.end(), myPrint); cout << endl;
    for_each(s2.begin(), s2.end(), myPrint); cout << endl;

    cout << "容器交换后" << endl;
    s1.swap(s2);
    for_each(s1.begin(), s1.end(), myPrint); cout << endl;
    for_each(s2.begin(), s2.end(), myPrint); cout << endl;

        s1.swap(s2);
    cout << "删除第二个元素b" << endl;
    s1.erase(++s1.begin());
    for_each(s1.begin(), s1.end(), myPrint); cout << endl;

    cout << "删除第三、四个元素de" << endl;
    //为啥这么写没什么效果
    set<char>::iterator it1=++(++s1.begin()) ;
    set<char>::iterator it2=++(it1) ;
    s1.erase(it1,it2);
    for_each(s1.begin(), s1.end(), myPrint); cout << endl;

    cout << "删除j" << endl;
    s1.erase('j');
    for_each(s1.begin(), s1.end(), myPrint); cout << endl;

    cout << "清空" << endl;
    s1.clear();
    for_each(s1.begin(), s1.end(), myPrint); cout << endl;
}

因为

set<char>::iterator it2=++(it1);

it1 本身也在自增,这时候 it2 = it1,所以没变化


如果有用麻烦点个采纳,谢谢~

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/993994
  • 这篇博客你也可以参考下:set的用法
  • 除此之外, 这篇博客: set查找和统计中的 测试代码 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • #include <iostream>
    
    using namespace std;
    
    #include <set>
    
    //查找和统计
    void test01()
    {
    	set<int> s1;
    	//插入
    	s1.insert(10);
    	s1.insert(30);
    	s1.insert(20);
    	s1.insert(40);
    
    	//查找
    	set<int>::iterator pos = s1.find(30);
    
    	if (pos != s1.end())
    	{
    		cout << "找到了元素 : " << *pos << endl;
    	}
    	else
    	{
    		cout << "未找到元素" << endl;
    	}
    
    	//统计
    	int num = s1.count(30);
    	cout << "num = " << num << endl;
    }
    
    int main() {
    
    	test01();
    
    	system("pause");
    
    	return 0;
    }