我在范围内创建了一个大型// Loop through WC_Order_Item_Coupon Objects
foreach ( $order->get_items( 'coupon' ) as $item ) {
// Get the WC_Coupon Object
$coupon = new WC_Coupon($item->get_code());
// Display coupon description
echo "<p class='coupon-description'>".$coupon->get_description()."</p>";
}
,我想将其推入驻留在该范围外的向量中而不进行复制(因为它非常大)。有没有办法像我目前所做的那样将向量v推入vvec而不进行复制?
vector<object>
答案 0 :(得分:1)
您可以std::move
std::vector<std::vector<object>> vvec;
{
std::vector<object> v;
v.emplace_back(object());
vvec.push_back(std::move(v));
}
如果我模拟以下课程
struct object
{
object() { std::cout << "default construct\n"; }
object(object const&) { std::cout << "copy construct\n"; }
object(object&&) { std::cout << "move construct\n"; }
};
然后上面的代码片段现在产生输出
default construct
move construct
因此此举避免了内部副本。