gpt4 book ai didi

c++ - 如何强制 std::sort 使用 move 构造函数和 move 赋值?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:37:09 25 4
gpt4 key购买 nike

我有一个类Data这是(就目前而言)不可复制的。 std::sortstd::vector<Data>之所以有效,是因为我已经为 Data 定义了 move 构造函数和 move 赋值。 .我这样做是因为类里面有很多数据,复制内容太慢了。但是,我现在正在考虑添加一个复制构造函数 Data(const Data& other)和标准赋值运算符(来自 const Data& )到类,出于不相关的原因。我如何确保当我对 Data 的 vector 进行排序时, std::sort还会使用 move 构造函数和 move 赋值吗?

最佳答案

How can I make sure that when I sort a vector of Data, std::sort will still use the move-constructor and move-assignment?

其实,你不需要。您必须确保使用的 swap 函数直接或间接地利用了 move 构造函数中已经使用的任何技巧。这就是我认为它是如何工作的。换句话说,sort 需要一个很好的交换,而不一定是一个拷贝。

“直接”可能意味着简单地使用默认的 std::swap,它会尽可能使用 move 构造函数。

template <class T> void swap (T& a, T& b)
{
T c(std::move(a)); a=std::move(b); b=std::move(c);
}

因此,很可能您不需要做任何特殊的事情,因为 swap(或如@MarcGlisse 指出的那样,直接排序算法)将使用 move 构造函数。

关于c++ - 如何强制 std::sort 使用 move 构造函数和 move 赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34700426/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com