想象一下,我想構建一個沒有移動或複製構造函數的固定大小的std::vector
,例如std::atomic<int>
。在這種情況下,底層的std::atomic
類有一個1-arg構造函數,它接受一個int
以及一個默認構造函數(將值初始化爲0)。std :: vector的安置式構造
使用initializer_list
語法等std::vector<std::atomic<int>> v{1,2,3}
不起作用,因爲參數首先被轉換爲向量的元素T
類型創建initializer_list
的的一部分,因此所述複製或移動的構造將被調用。
在std::atomic<int>
的特定情況下,我可以缺省方式構造的載體中,然後發生變異的元素後:
std::vector<std::atomic<int>> v(3);
v[0] = 1;
v[1] = 2;
v[2] = 3;
然而,除了是難看和低效的,這不是因爲許多一般的溶液對象可能不會提供相當於通過調用相應的構造函數可以獲得的構造後變化。
有沒有什麼辦法可以獲得我想要在矢量構建中使用的「類似於emplace的」行爲?
說真的,我只是使用'std :: deque'。但是如果你不能,唯一的辦法就是通過自定義分配器來做你想做的事情。 – Brian
@布萊恩 - 'std :: deque'是否允許這種構造方式? – BeeOnRope
對於'std :: deque',你必須逐個放置元素,但是它會起作用,因爲向開始或結束添加元素不會移動任何其他元素。 – Brian