📜  C++ STL-Multiset.operator=函数

📅  最后修改于: 2020-10-19 07:44:53             🧑  作者: Mango

C++ STL Multiset.operator=

Multiset中有以下三种使用运算符=的用法:

  • 运算符 =用于通过替换旧内容(或复制内容)将新内容分配给多集容器,并在必要时修改大小。
  • 运算符 =用于将一个多集容器的内容移动到另一个容器中,并在必要时修改大小。
  • 运算符 =用于将元素从初始值设定项列表复制到多集容器。

句法

copy(1)      multiset& operator= (const multiset& x);                                //until C++ 11

copy (1)       multiset& operator= (const multiset& x);                         //since C++ 11

move (2)        multiset& operator= (multiset&& x);                                   //since C++ 11

initializer list (3)    multiset& operator= (initializer_list il);      //since C++ 11

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

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

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

参数

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

il:初始化列表对象。

返回值

这个指针。

复杂度

复印分配:尺寸线性。

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

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

迭代器有效性

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

数据竞争

访问所有复制的元素。

移动分配修改x。

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

异常安全

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

例子1

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

#include 
#include 

using namespace std;

int main(void) {

   multiset s1 = {10,20,10,30};

   cout << "Multiset s1 contains following elements" << endl;
    for (auto it = s1.begin(); it != s1.end(); ++it)
      cout << *it << endl;
      
    multiset s2 = s1;  
    cout<<"\nAfter copying the elements from s1 to s2... \n";  
    
    cout << "\nMultiset s2 contains following elements" << endl;
    for (auto it = s2.begin(); it != s2.end(); ++it)
      cout << *it<< endl; 

   return 0;
}

输出:

Multiset s1 contains following elements
10
10
20
30

After copying the elements from s1 to s2... 

Multiset s2 contains following elements
10
10
20
30

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

例子2

让我们看一个简单的示例,将一个多重集的元素移动到另一个:

#include 
#include 

using namespace std;

int main(void) {
   
   multiset s1 = {'a','e','i','o','u','e','u'};

      cout << "Multiset m1 contains following elements" << endl;
    for (auto it = s1.begin(); it != s1.end(); ++it)
      cout << *it << ", ";
      
    multiset s2 = move(s1); 
    cout<<"\n\nAfter moving the elements from s1 to s2... \n";  
    
    cout << "\nMultiset s2 contains following elements" << endl;
    for (auto it = s2.begin(); it != s2.end(); ++it)
      cout << *it << ", ";

   return 0;
}

输出:

Multiset m1 contains following elements
a, e, e, i, o, u, u, 

After moving the elements from s1 to s2... 

Multiset s2 contains following elements
a, e, e, i, o, u, u,

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

例子3

让我们看一个简单的示例,将内容从初始化列表复制到多集:

#include 
#include 

using namespace std;

int main(void) {
   multiset s;

   s = {100, 200, 300, 100, 300};  //initializer list

   cout << "Multiset contains the following elements" << endl;

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

   return 0;
}

输出:

Multiset contains the following elements
100
100
200
300
300

在上面的示例中, 运算符 =用于将内容从初始化列表复制到多重集m。

例子4

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

#include 
#include 

using namespace std;

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

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

  cout<<  "Size Of c1:"  <<  c1 . size ()  << endl ; 
  cout<< "Size Of c2:"  <<  c2 . size ()  << endl ; 
}

输出:

Size Of c1:0
Size Of c2:7

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