C++ set constructor(構(gòu)造函數(shù)) 使用方法及示例

C++ STL Set(集合)

set構(gòu)造函數(shù)有以下五種用途:

  1. 默認構(gòu)造函數(shù):用于構(gòu)造具有零個元素的空set容器。

  2. 范圍構(gòu)造函數(shù):用于構(gòu)造內(nèi)容范圍為[first,last)的容器。

  3. 復制構(gòu)造函數(shù):用于構(gòu)造帶有現(xiàn)有容器元素副本的集合。

  4. move構(gòu)造函數(shù):用于使用move語義與其他元素一起構(gòu)造容器。

  5. 初始化程序列表構(gòu)造函數(shù):用于構(gòu)造帶有初始化程序列表內(nèi)容的集合。

語法

默認構(gòu)造函數(shù)

explicit set (const key_compare& comp = key_compare(),
              const allocator_type& alloc = allocator_type());	//到 C++ 11

explicit set (const key_compare& comp = key_compare(),
              const allocator_type& alloc = allocator_type());
explicit set (const allocator_type& alloc);			//從C ++ 11開始

范圍構(gòu)造器

template <class InputIterator>
  set (InputIterator first, InputIterator last,
       const key_compare& comp = key_compare(),
       const allocator_type& alloc = allocator_type());		//到 C++ 11

template <class InputIterator>
  set (InputIterator first, InputIterator last,
       const key_compare& comp = key_compare(),
       const allocator_type& = allocator_type());			//從C ++ 11開始

復制構(gòu)造函數(shù)

set (const set& x);						//到 C++ 11
	
set (const set& x);
set (const set& x, const allocator_type& alloc);			//從C ++ 11開始

移動構(gòu)造函數(shù)

set (set&& x);
set (set&& x, const allocator_type& alloc);			//從C ++ 11開始

初始化列表構(gòu)造函數(shù)

set (initializer_list<value_type> il,
     const key_compare& comp = key_compare(),
     const allocator_type& alloc = allocator_type());		//從C ++ 11開始

參數(shù)

comp:比較函數(shù)對象,它接受兩個關鍵參數(shù),如果第一個參數(shù)在第二個參數(shù)之前,則返回true,否則返回false。默認情況下,它使用less <key_type>謂詞。

alloc:一個分配器對象,用于此容器的所有內(nèi)存分配。

first:將迭代器輸入范圍內(nèi)的第一個位置。

last:將迭代器輸入到范圍中的最后一個位置。

x:另一個相同類型的set對象。

il:一個初始化器列表對象,將從中復制元素。

返回值

構(gòu)造函數(shù)從不返回任何值。

復雜度

對于空的構(gòu)造函數(shù)和移動的構(gòu)造函數(shù),復雜性將是恒定的。

對于所有其他情況,如果元素已經(jīng)排序,則迭代器之間的距離的復雜度將是線性的。

迭代器有效性

如果set容器的元素在move構(gòu)造函數(shù)中移動,則使與x相關的所有指針,迭代器和引用無效。

數(shù)據(jù)爭用

訪問所有復制的元素。

異常安全

萬一引發(fā)異常,則沒有任何效果。

實例1

讓我們看一下默認構(gòu)造函數(shù)的簡單示例:

#include <iostream>
#include <set>

using namespace std;

int main(void) {
   // 默認構(gòu)造函數(shù)
   set<char> s;
  
   int size = s.size(); 

   cout << "集合s的大小 = " << size;
   return 0;
}

輸出:

集合s的大小 = 0

在上面的示例中,s是一個空集,因此size為0。

實例2

讓我們來看一個范圍構(gòu)造函數(shù)的簡單示例:

#include <iostream>
#include <set>

using namespace std;

int main(void) {
   int evens[] = {2,4,6,8,10};
  
   // 范圍構(gòu)造函數(shù)
   set<int> myset (evens, evens+5);  

   cout << "集合容器myset的大小為 : " << myset.size();
   return 0;
}

輸出:

集合容器myset的大小為: 5

在上面的示例中,set myset由evens元素構(gòu)成。

實例3

讓我們來看一個簡單的復制構(gòu)造函數(shù)示例:

#include <iostream>
#include <set>

using namespace std;

int main(void) {
   //默認構(gòu)造函數(shù)
   std::set<int> s1;
   s1.insert(5);
   s1.insert(10);

   cout << "集合容器s1的大小為 : " << s1.size();
  
   // 復制構(gòu)造函數(shù)
   set<int> s2(s1);
   cout << "\n新集合容器s2的大小為 : " << s2.size();
   return 0;
}

輸出:

集合容器s1的大小為 : 2
新集合容器s2的大小為 : 2

在上面的示例中,s2是s1集合的拷貝副本。

實例4

我們來看一個簡單的移動構(gòu)造函數(shù)示例:

#include <iostream>
#include <set>

using namespace std;

int main(void) {
   // 默認構(gòu)造函數(shù)
   set<char> s1;
   s1.insert('x');
   s1.insert('y');

   cout << "集合容器s1的大小為 : " << s1.size();

   // Move 構(gòu)造函數(shù)
   set<char> s2(move(s1));
   cout << "\n新集合容器s2的大小為 : " << s2.size();
   return 0;
}

輸出:

集合容器s1的大小為 : 2
新集合容器s2的大小為 : 2

在上面的示例中,s1的內(nèi)容被移至s2 set。

實例5

讓我們看一個簡單的初始化列表構(gòu)造函數(shù)示例:

#include <iostream>
#include <set>
#include <string>

using namespace std;

int main() {
   // 初始化列表構(gòu)造函數(shù)
   set<string> fruit {
      "orange", "apple", "mango", "peach", "grape"
   };

   cout << "容器內(nèi)fruit的大小為 : " << fruit.size();
   return 0;
}

輸出:

容器內(nèi)fruit的大小為 : 5

上面的示例創(chuàng)建一個以字符串為鍵的set水果,并使用initializer_list對其進行初始化。

C++ STL Set(集合)

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清