gpt4 book ai didi

c++ - 是否可以在 C++ 中使用宏交换两个变量的出现?

转载 作者:行者123 更新时间:2023-11-27 23:38:02 25 4
gpt4 key购买 nike

我正在研究一个竞赛问题,我必须按以下方式初始化一个 vector :

vector<pair<int,int>> moves({{i,j}, {i,-j}, {-i,j}, {-i,-j}, 
{j,i}, {j,-i}, {-j,i}, {-j,-i}});

虽然我知道这不是最好的方法并且我知道有很多不同的方法可以用最少的努力完成这个,但我想知道 C++ 宏是否有一种方法允许我简单地复制粘贴前四个元素上述 vector 以下列方式实现相同的目的:

vector<pair<int,int>> moves({{i,j}, {i,-j}, {-i,j}, {-i,-j},
#define i j
#define j i
{i,j}, {i,-j}, {-i,j}, {-i,-j}
#undef i
#undef j
});

由于变量的循环引用,上面的代码显然不起作用。

附言: 尽管 Matteo Italia 的回答在上述上下文中是绝对正确的,但我更感兴趣的是知道在 C++ 中是否可以使用宏交换变量的出现,以及如果可能的话如何交换?

最佳答案

如果您真的认为这是一种节省,您可以使用函数式宏并调用它两次,交换其参数。

#define SIGN_COMB(a, b) {(a), (b)}, {(a), -(b)}, {-(a), (b)}, {-(a), -(b)}
vector<pair<int,int>> moves({SIGN_COMB(i, j), SIGN_COMB(j, i)})

像往常一样,宏扩展中的括号是为了避免表达式作为参数传递时出现意外情况(如果传入一个表达式,例如 x+y,则否定项将是 -x+y 而不是 -(x+y))。

关于c++ - 是否可以在 C++ 中使用宏交换两个变量的出现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57733722/

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