簡體   English   中英

為構造的std :: vector中的每個元素調用默認構造函數

[英]Invoke default constructor for each element in constructed std::vector

有沒有辦法通過為每個元素調用默認構造函數來構造N個元素的std::vector<C>

size_type的構造函數只調用C的構造函數一次,然后將其復制構造函數用於其余元素。

size_type的構造函數只調用C的構造函數一次,然后將其復制構造函數用於其余元素。

C++11以來不正確。 看看std :: vector :: vector文檔

...

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

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

...

然后:

...

2)使用值值的元素的計數副本構造容器。

3)使用計數默認插入的T實例構造容器。不制作副本。

...

所以你需要第3個構造函數std::vector<C>(size)


似乎這種行為僅在c++11才存在。

c++11之前我找不到這樣做的方法。 由於沒有構造函數可以執行此操作,因此選項可能是創建一個空向量,保留然后是emplace_back元素。 但是emplace_back是從c++11 ......所以...我們回到emplace_back

這樣做:

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

現場演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM