一、erase() 方法
如图所示:
#include <iostream>
#include <set>
#include <string>
using namespace std;
int main()
{
//创建并初始化 set 容器
set<int>myset{1,2,3,4,5};
cout << "myset size = " << myset.size() << endl;
//1) 调用第一种格式的 erase() 方法, 其返回值为一个整数,表示成功删除的元素个数
int num = myset.erase(2); //删除元素 2,myset={1,3,4,5}
cout << "1、myset size = " << myset.size() << endl;
cout << "num = " << num << endl;
//2) 调用第二种格式的 erase() 方法, 返回值是迭代器,其指向的是 set 容器中删除元素之后的第一个元素
set<int>::iterator iter = myset.erase(myset.begin()); //删除元素 1,myset={3,4,5}
cout << "2、myset size = " << myset.size() << endl;
cout << "iter->" << *iter << endl;
//3) 调用第三种格式的 erase() 方法, 返回值是迭代器,其指向的是 set 容器中删除元素之后的第一个元素
set<int>::iterator iter2 = myset.erase(myset.begin(), --myset.end());//删除元素 3,4,myset={5}
cout << "3、myset size = " << myset.size() << endl;
cout << "iter2->" << *iter2 << endl;
return 0;
}
执行结果为:
二、clear()方法
该方法不需要传入任何参数,也没有任何返回值。
#include <iostream>
#include <set>
#include <string>
using namespace std;
int main()
{
//创建并初始化 set 容器
std::set<int>myset{1,2,3,4,5};
cout << "1、myset size = " << myset.size() << endl;
//清空 myset 容器
myset.clear();
cout << "2、myset size = " << myset.size() << endl;
return 0;
}
执行结果为:
三、find()方法
参数:该函数接受一个强制性参数element ,该元素指定要在集合容器中搜索的元素。
返回值:该函数返回一个迭代器,该迭代器指向在集合容器中搜索的元素。如果找不到该元素,则迭代器将指向集合中最后一个元素之后的位置。
// CPP program to demonstrate the
// set::find() function
#include <bits/stdc++.h>
using namespace std;
int main()
{
// Initialize set
set<int> s;
s.insert(1);
s.insert(4);
s.insert(2);
s.insert(5);
s.insert(3);
for (auto j = s.begin(); j != s.end(); j++) {
cout << *j<<"\t";
}
cout<<endl;
auto pos = s.find(3);
// prints the set elements
cout << "The set elements after 3 are: ";
for (auto it = pos; it != s.end(); it++)
cout << *it << " ";
return 0;
}
这些都是查找成功的情况,返回对应元素位置的迭代器,那如果找不到呢?经过验证得出:找不到返回it.end(),也即集合中最后一个元素之后的位置。但我试了发现一个很奇怪的事:找不到时返回的迭代器对应的元素居然不是0,而是5(集合中最后一个元素)!如图所示:
#include <bits/stdc++.h>
using namespace std;
int main()
{
// Initialize set
set<int> s;
s.insert(1);
s.insert(4);
s.insert(2);
s.insert(5);
s.insert(3);
for (auto j = s.begin(); j != s.end(); j++) {
cout << *j<<"\t";
}
cout<<endl;
cout<<"找不存在的0:";
auto pos = s.find(0);
cout<<*pos<<"\t";
cout<<(pos==s.end())<<endl;
cout<<"找存在的5:";
auto pos2 = s.find(5);
cout<<*pos2<<"\t";
cout<<(pos2==s.end())<<endl;
cout<<"找不存在的6:";
auto pos3 = s.find(6);
cout<<*pos3<<"\t";
cout<<(pos3==s.end())<<endl;
cout<<"找不存在的7:";
auto pos4 = s.find(7);
cout<<*pos4<<"\t";
cout<<(pos4==s.end())<<endl;
cout<<"*s.begin():"<<*s.begin()<<endl;
cout<<"*s.end():"<<*s.end()<<endl;
return 0;
}
可见s.end()虽然指向不存在的位置,但这个位置的数据并不是0,而是非空集合当中的最后一个元素!
所以判断是否成功找到的条件应该为if(pos!=s.end())而不是if(*pos!=0):
set<int> test;
if(test.find(x)!=test.end()); //之前忘记加()
{
···
}
四、insert()方法
#include <bits/stdc++.h>
using namespace std;
int main()
{
set<int> s;
// Function to insert elements
// in the set container
s.insert(1);
s.insert(4);
s.insert(2);
s.insert(5);
s.insert(3);
cout << "The elements in set are: ";
for (auto it = s.begin(); it != s.end(); it++)
cout << *it << " ";
return 0;
}
文章来源:https://www.toymoban.com/news/detail-718361.html
文章来源地址https://www.toymoban.com/news/detail-718361.html
到了这里,关于C++ STL set:erase()、clear()、find()、insert()方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!