如何在不复制的情况下将一个向量移动到另一个向量

时间:2020-06-23 17:30:24

标签: c++ copy stdvector move-semantics

我在范围内创建了一个大型// 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>

1 个答案:

答案 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

因此此举避免了内部副本。

相关问题