当我想在向量内构造对象时,可以编写以下代码:
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);
}
?
答案 0 :(得分:5)
您的程序不相同。
data.emplace(data.begin()+49, param);
将一个新元素插入向量。这样会增加向量的大小,并使元素移动到插入点之外。
new (&data[49]) NonTrivialType{param};
覆盖现有元素。如果NonTrivialType
具有非平凡的析构函数,则不会先破坏现有的那个而不会导致未定义的行为。