我想知道在操作方面,交换整数的方式最有效的是c ++,为什么?是这样的:
int a =..., b = ...;
a = a + b;
b = a - b;
a = a - b;
比使用临时更有效?还有其他更有效的方法吗? (不要求其他方式交换整数),为什么它们会更有效率?
分配值总是比进行算术运算更快。
C++ implementation for std :: swap是
template<typename T> void swap(T& t1, T& t2) {
T temp = std::move(t1); // or T temp(std::move(t1));
t1 = std::move(t2);
t2 = std::move(temp);
}
所以使用临时变量比做算术技巧要好。 并且使用std :: swap甚至更好,因为在编程中重新发明轮子永远不是一个好主意
最好的方法是信任您的编译器并使用C ++标准库函数。它们是为彼此设计的。
std::swap
将获胜。
你可以使用XOR交换来获得int
(它不需要临时的),但是现在它的表现仍然不如std::swap
。
就我而言,std::swap
比以下慢5%(均采用O3优化)。通常,std :: swap()函数调用复制构造函数,它可能总是比复制部分内存慢。
#include <cstring>
size_t objectSize = sizeof(Object);
Object *temp = (Object *) malloc(objectSize);
loop {
loop {
memcpy(temp, a, objectSize);
memcpy(a, b, objectSize);
memcpy(b, temp, objectSize);
}
}
#include <iostream>
using namespace std;
void swap(int &a, int &b){
b = (a+b) - (a=b);
}
int main() {
int a=1,b=6;
swap(a,b);
cout<<a<<b;
return 0;
}