Mar*_*ade 4 c++ double int performance processing-efficiency
我想知道在操作方面,交换整数的方式最有效的是c ++,为什么?是这样的:
int a =..., b = ...;
a = a + b;
b = a - b;
a = a - b;
Run Code Online (Sandbox Code Playgroud)
比使用临时更有效?还有其他更有效的方法吗?(不要求其他方式交换整数),为什么它们会更有效率?
分配值总是比算术运算快。
std :: swap的C ++实现是
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);
}
Run Code Online (Sandbox Code Playgroud)
因此,使用临时变量胜于算术技巧。
使用std :: swap甚至更好,因为重新发明编程轮子从来都不是一个好主意
最好的方法是信任您的编译器并使用C++标准库函数.它们是为彼此设计的.
std::swap 会胜利的.
你可以使用XOR交换int(它不需要临时的),但是现在它的表现仍然不如std::swap.
就我而言,std::swap比以下慢 5%(均采用 O3 优化)。一般来说, std::swap() 函数调用复制构造函数,它可能总是比复制部分内存慢。
#include <cstring>
size_t objectSize = sizeof(Object);
char temp[objectSize];
loop {
loop {
memcpy(temp, a, objectSize);
memcpy(a, b, objectSize);
memcpy(b, temp, objectSize);
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:使用堆栈而不是堆内存分配。
| 归档时间: |
|
| 查看次数: |
2857 次 |
| 最近记录: |