C++ STL set:erase()、clear()、find()、insert()方法

一、erase() 方法

        如图所示:

#include 
#include 
#include 
using namespace std;
int main()
{
    //创建并初始化 set 容器
    setmyset{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::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::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;
}

        执行结果为:

C++ STL set:erase()、clear()、find()、insert()方法_第1张图片

二、clear()方法

        该方法不需要传入任何参数,也没有任何返回值。

#include 
#include 
#include 
using namespace std;
int main()
{
    //创建并初始化 set 容器
    std::setmyset{1,2,3,4,5};
    cout << "1、myset size = " << myset.size() << endl;
    //清空 myset 容器
    myset.clear();
    cout << "2、myset size = " << myset.size() << endl;
    return 0;
}

        执行结果为:

C++ STL set:erase()、clear()、find()、insert()方法_第2张图片

三、find()方法

参数:该函数接受一个强制性参数element ,该元素指定要在集合容器中搜索的元素。

返回值:该函数返回一个迭代器,该迭代器指向在集合容器中搜索的元素。如果找不到该元素,则迭代器将指向集合中最后一个元素之后的位置。

// CPP program to demonstrate the
// set::find() function
#include 
using namespace std;
int main()
{

    // Initialize set
    set 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<

C++ STL set:erase()、clear()、find()、insert()方法_第3张图片

         这些都是查找成功的情况,返回对应元素位置的迭代器,那如果找不到呢?经过验证得出:找不到返回it.end(),也即集合中最后一个元素之后的位置。但我试了发现一个很奇怪的事:找不到时返回的迭代器对应的元素居然不是0,而是5(集合中最后一个元素)!如图所示:

#include 
using namespace std;
int main()
{

    // Initialize set
    set 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<

C++ STL set:erase()、clear()、find()、insert()方法_第4张图片

        可见s.end()虽然指向不存在的位置,但这个位置的数据并不是0,而是非空集合当中的最后一个元素!

        所以判断是否成功找到的条件应该为if(pos!=s.end())而不是if(*pos!=0):

	set test;
	if(test.find(x)!=test.end());	//之前忘记加()
	{
	···
	}

四、insert()方法

#include  
using namespace std; 
int main() 
{ 
  
    set 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; 
}

 

你可能感兴趣的:(c++,算法,开发语言)