【问题标题】:How do I store a value for later use?如何存储值以供以后使用?
【发布时间】:2021-10-26 03:45:34
【问题描述】:

如果我有 2 个变量要设置为彼此相等,我会怎么做?例如,如果我有 2 个数字 (3 , 8) 所以 xval = 3 和 yval = 8 我将如何使用以下过程交换它们?

xval = yval;
yval = xval;

这只会将两个值都设置为 y,然后输出 (8 , 8)。我记得早些时候在我的女孩那里有一个存储值供以后使用的函数,但我忘记了它是什么

【问题讨论】:

  • 声明第三个临时变量,或者更好地使用std::swap
  • 如果您正在处理整数,还有一种更奇特的方法,您可以使用 XOR 运算,不需要第三个变量。例如,ab 的交换值:a^= b; b^=a; a^=b。这背后的根本是x^x==0
  • @zois 现代架构上的 XOR 交换通常比涉及临时变量的交换慢,并且(如果要工作)还抑制了与指令流水线相关的一些优化(如果这些优化是没有被禁止,交换不能保证实际工作)。如果 ab 在内存中重叠(例如,一个是另一个的别名,直接或间接),它也不起作用。

标签: c++ variables


【解决方案1】:

1。使用预定义的交换

std::swap(xval , yval);

2。使用临时变量

int temp=xval;
xval = yval;
yval = temp;

3。不使用临时变量(注意溢出)

xval = xval+yval;
yval = xval-yval;
xval = xval-yval;

4。使用异或

xval = xval ^ yval ^ (yval = xval);

【讨论】:

  • 注意第二个选项溢出
  • 您忘记了惯用且可能是最佳解决方案:std::swap
  • @churill 是的,我现在已经更新了答案
  • 更新:注意第三个选项的溢出。
猜你喜欢
  • 2017-11-28
  • 1970-01-01
  • 2016-06-26
  • 2012-02-29
  • 2021-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-13
相关资源
最近更新 更多