0

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

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

 }

或任何其他想法?

4

3 回答 3

1

最惯用的选项是使用所需大小初始化列表。这是在构造函数初始化列表中完成的:

Queue<T,E>::Queue() : listObject(10) 
{
  ....
}

这将为您留下一个包含 10 个默认构造对象的列表(您是否真的需要这是另一回事)。

请注意,在 C++11 中,您可以在声明时初始化数据成员。所以你也可以这样做:

template <typename T, typename E> Queue
{
  ....
  list<E> listObject = list<E>{10};
};

更多关于std::list这里

于 2013-11-04T06:41:17.107 回答
0

有一个 list 的构造函数,它接受一个 size 参数。您可以使用初始化列表在类的构造函数中调用该构造函数

template<class T, class E>
Queue<T,E>::Queue()
:  listObject(10)
{}

如果您需要信息,请搜索并了解初始化列表。您可以在参考网站上阅读有关std::list该类的构造函数的更多信息——这就是我在这里所做的——尽管我承认当你刚开始时,一长串的构造函数有点多。

该页面对这个构造函数进行了以下说明,仅指定了一个计数(假设 C++11):“使用 T 的计数值初始化(默认构造,对于类)实例构造容器。”

于 2013-11-04T06:36:39.827 回答
0

目前暂不提供设置容量api。它返回的 max-size() 是一个超大整数,只是一个理论值。apiresize实际上会使用默认值(或对象构造函数)分配指定的 N 个大小的元素,而不仅仅是保留 N 个元素的空间。

如果你想支持一个容量,也许你应该继承 std::list,在你实现的子模板类中维护一个容量值。

于 2019-07-16T03:07:36.240 回答