使用初始容量在c ++中创建List

时间:2013-11-04 06:33:52

标签: c++ list stl containers

我正在创建一个模板类,其列表对象为私有成员:

 .
 .
 .
 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); 

 }

或任何其他想法?

3 个答案:

答案 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,在实现的子模板类中维护一个容量值。