我正在创建一个模板类,其列表对象为私有成员:
.
.
.
private:
list<E> listObject;
};
第一个构造函数必须创建一个容量为10的列表对象。你会怎么做?
template<class T, class E>
Queue<T,E>::Queue()
{
listObject.resize(10);
}
或
template<class T, class E>
Queue<T,E>::Queue()
{
listObject = new list<E>(10);
}
或任何其他想法?
答案 0 :(得分:1)
最惯用的选项是初始化具有所需大小的列表。这是在构造函数初始化列表中完成的:
Queue<T,E>::Queue() : listObject(10)
{
....
}
这将为您提供10个默认构造对象的列表(无论您实际需要的是另一个问题)。
请注意,在C ++ 11中,您可以在声明点初始化数据成员。所以你也可以这样做:
template <typename T, typename E> Queue
{
....
list<E> listObject = list<E>{10};
};
更多关于std::list
here。
答案 1 :(得分:0)
有一个list的构造函数,它接受一个size参数。您可以使用初始化列表
在类的构造函数中调用该构造函数template<class T, class E>
Queue<T,E>::Queue()
: listObject(10)
{}
如果您需要信息,请搜索并了解初始化列表。您可以在reference website上阅读有关std::list
类构造函数的更多信息 - 这就是我在这里所做的 - 尽管我承认,当您第一次开始时,很长一段时间的构造函数会有点多。
该页面描述了关于此构造函数的以下内容,仅指定了一个计数(假设C ++ 11):“构造具有计数值初始化(对于类的默认构造)T实例的容器。”
答案 2 :(得分:0)
当前,未提供设置容量api。返回的max-size()是一个超大整数,只是一个理论值。 api resize
实际上将分配具有默认值(或对象构造函数)的N个指定大小的元素,而不仅仅是保留N个元素的空间。
如果您想支持一个容量,也许您应该继承std :: list,在实现的子模板类中维护一个容量值。