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

时间:2016-01-04 09:29:30

标签: c++ constructor stdvector

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

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

2 个答案:

答案 0 :(得分:5)

  

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

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

  

...

     

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

     

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

     

...

然后:

  

...

     

2)使用带有值的元素的count副本构造容器   值。

     

3)构造具有count default插入的容器   T.的实例没有副本。

     

...

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

似乎此行为仅在c++11之后才存在。

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

答案 1 :(得分:3)

这样做:

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