如何使用Struct打印交换函数

How can I print my swap function with Struct

本文关键字:交换 函数 打印 Struct 何使用      更新时间:2023-10-16

你能帮我吗,我如何打印我的swap3函数?我会非常感激的。我是编程的初学者

#include <iostream>
using namespace std;
struct Pair{
int x;
int y;
};
Pair* swap3(const Pair& p){
Pair *t = new Pair();
t->x = p.y;
t->y = p.x; 
return t;
}
int main(){
int f = Pair(2,3);
swap3(f);
cout<<f<<endl;
return 0;

}

我的主要功能是假的吗?

您需要重载ostream运算符:

friend std::ostream &operator<<(std::ostream &os, const Pair& pair) {
os << pair.x << " " << pair.y << 'n';
return os;
}

如果您对操作员的oveloading感到不舒服,您可以简单地单独打印元素:

cout<< f.x <<" "<< f.y <<'n';

构造f的方式也是错误的(intPair不是同一类型(。您可以尝试列表初始化:

Pair f{2,3};
auto s = swap3(f);
cout<<f<<endl;
delete s;

请注意,您的代码中存在内存泄漏,因为您的函数返回一个指针,所以您不会存储它,也永远不会删除它

我建议使用智能指针来避免内存泄漏:

std::unique_ptr<Pair> swap3(const Pair& p){
auto t = make_unique<Pair>(Pair{});
t->x = p.y;
t->y = p.x; 
return t;
}

Godbolt 直播

p.S。我不确定你想要交换什么,在你发布的代码中,你根本不需要指针。我认为掉期应该写成:

void swap3(Pair& p1, Pair& p2){
Pair tmp{p1.x, p1.y};
p1.x = p2.x;
p1.y = p2.y;
p2.x = tmp.x;
p2.y = tmp.y;
}

或:

void swap3(Pair& p){
Pair tmp{p.x, p.y};
p.x = tmp.y;
p.y = tmp.x;
}

Godbolt 直播