C++初始化列表中的向量集大小或调整大小

C++ vector set size in initialization list or resize

本文关键字:调整 向量 初始化 列表 C++      更新时间:2023-10-16

以下哪一项更受欢迎/更有效率?

  • 初始化列表:

    class Trial {
    private:
    std::vector<int> _vec;
    public:
    Trial(size_t length) : _vec(length) {
    }
    };
    
  • 调整:

    class Trial {
    private:
    std::vector<int> _vec;
    public:
    Trial(size_t length) {
    _vec.resize(length);
    }
    };
    

我在生产代码中都见过这两种方法,但我也听说,如果您可以将一些工作委托给编译器,您应该这样做,所以我总是更喜欢第一个。

其中一个比另一个好吗?

后者通常首先默认构造向量,然后重新分配向量的存储以适应新的长度(如果大于默认值((有关汇编代码,请参阅此处(。相比之下,第一个变体只有一个分配(较少的汇编代码(。

请注意,编译器优化可能会很好地看穿这一点,但还有另一个原因(除了避免过早悲观(更喜欢第一个:通过显式初始化构造函数初始化列表(或内联(中的所有成员,您可以使用工具在意外未初始化某些内容时通知您。