C++ set operator= 使用方法及示例

C++ STL Set(集合)

set中有以下三种使用operator =的用法:

  1. Operator=用于通过替换旧内容(或复制内容)将新内容分配给集合容器,并在必要时修改大小。

  2. Operator=用于一个set的容器中的内容移动到另一个容器中,并在必要时修改大小。

  3. Operator=用于将元素从初始值设定项列表复制到set容器。

语法

copy(1)               set& operator= (const set& x);                             //until C++ 11
copy (1) 	set& operator= (const set& x);		            //从 C++ 11开始
move (2)	set& operator= (set&& x);                                   //从 C++ 11开始
initializer list (3)	set& operator= (initializer_list<value_type> il);      //从 C++ 11开始

copy(1):-将x中的所有元素复制到集合容器中。

move(2):-将x的内容移动到set容器中。

initializer_list(3):-将il的元素复制到set容器中。

参数

x:具有相同类型的set对象。

il:初始化列表对象。

返回值

这个指针。

复杂性

副本分配:尺寸线性。

移动分配:当前容器大小中的线性。

初始化程序列表分配:大小最大为对数。

迭代器有效性

与该集合相关的所有引用,迭代器和指针均无效。

数据争用

访问所有复制的元素。

移动分配修改x。

set容器及其所有元素均已修改。

异常安全

如果引发异常,则容器处于有效状态。

实例1

让我们看一个简单的示例,将一组内容复制到另一组:

#include <iostream>
#include <set>

using namespace std;

int main(void) {

   set<int> s1 = {10,20,30};

   cout << "集合s1包含以下元素" << endl;
    for (auto it = s1.begin(); it != s1.end(); ++it)
      cout << *it << endl;
      
    set<int> s2 = s1;  
    cout<<"\n将元素从s1复制到s2之后... \n";  
    
    cout << "\n集合s2包含以下元素" << endl;
    for (auto it = s2.begin(); it != s2.end(); ++it)
      cout << *it<< endl; 

   return 0;
}

输出:

集合s1包含以下元素
10
20
30

将元素从s1复制到s2之后... 

集合s2包含以下元素
10
20
30

在上面的示例中,运算符=用于将一个集合s1的内容复制到另一集合s2。

实例2

让我们看一个简单的示例,将一组元素移到另一组:

#include <iostream> 
#include <set>

using namespace std;

int main(void) {
   
   set<char> s1 = {'a','e','i','o','u'};

      cout << "集合m1包含以下元素" << endl;
    for (auto it = s1.begin(); it != s1.end(); ++it)
      cout << *it << ", ";
      
    set<char> s2 = move(s1); 
    cout<<"\n\n将元素从s1移动到s2之后... \n";  
    
    cout << "\n集合s2包含以下元素" << endl;
    for (auto it = s2.begin(); it != s2.end(); ++it)
      cout << *it << ", ";

   return 0;
}

输出:

集合m1包含以下元素
a, e, i, o, u, 

将元素从s1移动到s2之后?

集合s2包含以下元素
a, e, i, o, u,

在上面的示例中,运算符=用于将一个集合s1的内容移动到另一集合s2。

实例3

让我们看一个简单的示例,从初始化列表复制内容以进行设置:

#include <iostream>
#include <set>

using namespace std;

int main(void) {
   set<int> s;

   s = {100, 200, 300, 400, 500};  //初始化 list

   cout << "Set包含以下元素" << endl;

   for (auto it = s.begin(); it != s.end(); ++it)
      cout << *it << endl;

   return 0;
}

输出:

Set包含以下元素
100
200
300
400
500

在上面的示例中,operator =用于复制初始化程序列表中的内容以设置m。

实例4

让我们看一个简单的实例:

#include <iostream>
#include <set>

using namespace std;

int  main () 
{ 
  int  values []  =  {  5 ,  2 ,  4 ,  1 ,  0 ,  0 ,  9  }; 
  set < int >  c1 ( values ,  values  +  7 ); 
  set < int >  c2 ;

  c2  =  c1 ; 
  c1  =  set < int > ();

  cout<<  "c1的大小:"  <<  c1 . size ()  << endl ; 
  cout<< "c2的大小:"  <<  c2 . size ()  << endl ; 
}

输出:

c1的大小:0
c2的大小:6

在上面的示例中,有两组c1和c2。c1有7个元素,而c2为空,但是在将c1分配给c2之后,c1的大小变为0,c2的大小变为7。

C++ STL Set(集合)