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

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

有没有办法通过为每个元素调用默认构造函数来构造 std::vector<C> 个 N 个元素?

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

The constructor from size_type just calls C's constructor once and then uses its copy constructor for the rest of the elements.

C++11 以来不正确。看看std::vector::vector documentation:

...

vector( size_type count, const T& value, const Allocator& alloc = Allocator()); (2)

explicit vector( size_type count, const Allocator& alloc = Allocator() ); (3)

...

然后:

...

2) Constructs the container with count copies of elements with value value.

3) Constructs the container with count default-inserted instances of T. No copies are made.

...

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


似乎这种行为仅在 c++11.

之后才存在

我在 c++11 之前找不到这样做的方法。由于没有构造函数可以执行此操作,因此可以选择创建一个空向量,保留然后 emplace_back 个元素。但是 emplace_back 是因为 c++11 所以...我们回到原点。

只需这样做:

std::vector<C> v(size)

示例:

#include <iostream>
#include <string>
#include <vector>
class C{
    public:
    C(){
        std::cout << "constructor\n";
    }
    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

Live Demo