【问题标题】:creating a List in c++ with initial capacity在 C++ 中创建具有初始容量的列表
【发布时间】:2013-11-14 18:40:58
【问题描述】:

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

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

 }

或任何其他想法?

【问题讨论】:

标签: c++ list stl containers


【解决方案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

【讨论】:

    【解决方案2】:

    列表有一个带有大小参数的构造函数。您可以使用 initializer list

    在类的构造函数中调用该构造函数
    template<class T, class E>
    Queue<T,E>::Queue()
    :  listObject(10)
    {}
    

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2010-09-23
        • 2023-03-24
        • 1970-01-01
        • 1970-01-01
        • 2012-08-29
        • 1970-01-01
        • 2014-10-13
        • 1970-01-01
        • 2014-07-01
        相关资源
        最近更新 更多