![](/img/trans.png)
[英]Initialize std::vector by calling the non-default constructor of each element with varying arguments, without unnecessary copying
[英]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.