2013-09-25 168 views
0

甲向量被定義爲爲什麼allocator在構造函數中?

template < class T, class Alloc = allocator<T> > class vector; 

每個向量構造(或每種類型的一個過載)具有分配器的過載和默認構造具有一個爲好。分配器已在類模板中指定。什麼是構造器分配器?

http://www.cplusplus.com/reference/vector/vector/vector/

default (1) 

explicit vector (const allocator_type& alloc = allocator_type()); 

fill (2)  

explicit vector (size_type n); 
     vector (size_type n, const value_type& val, 
       const allocator_type& alloc = allocator_type()); 

range (3) 

template <class InputIterator> 
    vector (InputIterator first, InputIterator last, 
      const allocator_type& alloc = allocator_type()); 

copy (4)  

vector (const vector& x); 
vector (const vector& x, const allocator_type& alloc); 

move (5)  

vector (vector&& x); 
vector (vector&& x, const allocator_type& alloc); 

initializer list (6)  

vector (initializer_list<value_type> il, 
     const allocator_type& alloc = allocator_type()); 
+1

它允許您傳遞分配器的特定實例。 – juanchopanza

+0

@juanchopanza:當使用類模板析構函數調用向量析構函數時它不會中斷嗎? – user2814152

+0

我看不出爲什麼它應該打破。標準庫容器的設計並非如此簡單。 – juanchopanza

回答

2

在模板括號中的參數是分配器的類型(類)。構造函數的參數是該類型的一個實例。

+0

哦!我現在看到它,它在那裏使用類而不是一個特定的實例。當他們可以在模板 – user2814152

+0

@ user2814152中提供實例時,這有點奇怪:他們不能。該語言不允許任意對象作爲模板參數傳遞。 –

+0

我不是指實例。這裏像int這樣http://stackoverflow.com/questions/3082113/calculating-factorial-using-template-meta-programming – user2814152

相關問題