2014-01-13 4 views
0

Я создал шаблон для игры с вектором объектов.шаблон, содержащий вектор или вектор векторов

template <class T> 
class ensemble{ 
public: 
std::vector<T> list; 

// Constructor 
ensemble(int i) { 
    int j; 
    T *Tptr; 

    list.reserve(i); 

    for (j = 0; j < i; j++) { 
    Tptr = new T; 
    list.push_back(*Tptr); 
    } 
}; 
}; 

В основном(), таким образом, можно создать объект, который представляет собой вектор объектов класса Т с ensemble<T> test(100), который будет генерировать тест-объекта, который содержит 100 объектов класса Т, которые хранятся в векторе.

Теперь я хотел бы обобщить его на создание шаблона, который мог бы создать либо вектор объектов (как указано выше), либо двумерный массив объектов, т. Е. Вектор векторов. Любая идея, как это сделать с тем же шаблоном?

Большое спасибо заранее! Xtof

+2

Есть 'i' утечки памяти, один за' new'. C++ - это не Java. –

+1

Следующие могут помочь вам: [Установка указателя на произвольный размерный массив?] (Http://stackoverflow.com/questions/19709529/setting-pointer-to-arbitrary-dimension-array/19725907#19725907) – Jarod42

ответ

0

Вам не нужно ни звонить reserve, ни делать цикл в конструкторе. Это может быть сделано за один раз путем вызова правильный конструктор в списке ensemble инициализатора:

ensamble(int i) 
    : list(i, T()) 
{} 

Это приведет к тому, вектор должен быть создан, чтобы содержать i по умолчанию возведенных элементов.

Что касается создания экземпляра ensemble с использованием вектора, это как сделать это для любого другого типа:

// Creates an instance containing 100 integers 
ensemble<int> e1(100); 

// Create an instance containing 100 vectors of integer 
ensemble<std::vector<int>> e2(100) 
+0

Спасибо за совет по конструктор. Хорошо знать. В противном случае способ создания вектора векторов не является тем, что я ищу. Фактически, второе измерение отсутствует. Я предпочел бы, чтобы шаблон создавал класс, содержащий вектор векторов. Грубой силой было бы создать один класс для вектора, как и я, а другой класс - вектор векторов. Но я хотел бы иметь все в одном классе. Может быть, с шаблоном специализации? –

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