2013-09-25 2 views
0

вектор определяется какпочему распределитель в конструкторе?

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 here http://stackoverflow.com/questions/3082113/calculating-factorial-using-template-meta-programming – user2814152

Смежные вопросы