gpt4 book ai didi

c++ - 交换两个复杂结构的最快方法是什么?

转载 作者:行者123 更新时间:2023-11-30 02:16:27 26 4
gpt4 key购买 nike

我需要将一个结构的值与另一个交换,并且相信交换比复制更快 - 我说得对吗?

#include <iostream>
#include <algorithm>
#include <vector>

class B
{
public:
int y;
std::vector<int> z;
B(){std::cout << "Called" << std::endl;}
private:
int z1;
};

int main()
{
B b1, b2;
b1.z.push_back(1);
std::swap(b1,b2);
std::cout << b2.z[0] << std::endl;
b1.z.push_back(1);
b2 = std::move(b1);
std::cout << b2.z[0] << std::endl;
b1.z.push_back(1);
std::exchange(b1, b2);
std::cout << b2.z[0] << std::endl;
b1.z.push_back(1);
b2 = std::forward<B>(b1);
std::cout << b2.z[0] << std::endl;
}

上面的代码按预期进行了交换,但我不确定哪种方法最快。我的目标是将一个结构变量的值(如果更快则交换)复制到另一个结构变量。在实际代码中,该结构将具有复杂的用户定义类型。

我知道同样会有复制的方法 - 但哪种方法最好/安全/快速复制到目的地?

我是否需要照顾一些运算符/构造函数来帮助它?

最佳答案

给定

  1. 允许编译器为B 生成一个移动构造函数(研究5 的规则),这是一个memberwise根据as-if规则移动构造

  2. std::move 如果可用则使用移动构造函数

  3. std::swap 使用 std::move

  4. std::vector 有一个移动构造函数

,简单地使用

std::swap(b1, b2);

非常难以击败。

关于c++ - 交换两个复杂结构的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54886588/

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