std :: vector :: emplace vs放置新

时间:2019-03-07 14:40:08

标签: c++ c++11

当我想在向量内构造对象时,可以编写以下代码:

30

这可以很好地工作,但是比我使用新的展示位置来生成的代码似乎更多:

5

我的问题是,为什么我要使用<?php $totalamount = ''; $seconds = strtotime('08:00:00 AM') - strtotime('01:00:00 PM'); echo $hours = abs(floor($seconds/3600)); if($hours == 3) { $totalamount = 30.00; } elseif($hours == 4) { $totalamount = 35.00; } elseif($hours == 5) { $totalamount = 40.00; } echo ' '.$totalamount; ?> 代替展示位置class NonTrivialType { NonTrivialType() = default; NonTrivialType(InitParam param){/* implementation */}; }; // array with 100 default-constructed objects in it std::vector<NonTrivialType> data(100); int main(){ // prepare some init parameters InitParam param{/* some data */}; // construct an object at 50th position data.emplace(data.begin()+49, param); }

1 个答案:

答案 0 :(得分:5)

您的程序不相同。

data.emplace(data.begin()+49, param);将一个新元素插入向量。这样会增加向量的大小,并使元素移动到插入点之外。

new (&data[49]) NonTrivialType{param};覆盖现有元素。如果NonTrivialType具有非平凡的析构函数,则不会先破坏现有的那个而不会导致未定义的行为。