为构造的std::vector中的每个元素调用默认构造函数

Invoke default constructor for each element in constructed std::vector

本文关键字:元素 构造函数 调用 默认 vector std      更新时间:2023-10-16

有没有一种方法可以通过调用每个元素的默认构造函数来构造N个元素的std::vector<C>

size_type的构造函数只调用C的构造函数一次,然后对其余元素使用其复制构造函数。

size_type中的构造函数只调用C的构造函数一次然后对其余元素使用其复制构造函数。

C++11以来不成立。查看std::vector::vector文档:

向量(size_type count,常量T&价值const分配器&alloc=Allocator());(2)

显式向量(size_type count,const Allocator&alloc=Allocator());(3)

然后:

2) 构造包含具有值的元素的计数副本的容器价值

3) 构造插入默认计数的容器T的实例。不复制。

所以你需要第三个构造函数std::vector<C>(size)


这种行为似乎只存在于c++11之后。

c++11之前,我找不到这样做的方法。由于没有构造函数可以做到这一点,因此可以选择创建一个空向量、reserve,然后创建emplace_back元素。但emplace_back是从c++11开始的,所以……我们回到了原点。

只需执行以下操作:

std::vector<C> v(size)

示例:

#include <iostream>
#include <string>
#include <vector>
class C{
    public:
    C(){
        std::cout << "constructorn";
    }
    C(C const&){
        std::cout << "copy/n";
    }
};
int main()
{
    std::vector<C> v(10);
}

结果:(C++11/14)

constructor 
constructor 
constructor 
constructor
constructor
constructor 
constructor
constructor
constructor
constructor

结果:(C++98)

constructor
copy
copy
copy
copy
copy
copy
copy
copy
copy
copy

实时演示

相关文章: