最有效的交换值c ++的方法

问题描述 投票:2回答:4

我想知道在操作方面,交换整数的方式最有效的是c ++,为什么?是这样的:

int a =..., b = ...;
a = a + b;
b = a - b;
a = a - b;

比使用临时更有效?还有其他更有效的方法吗? (不要求其他方式交换整数),为什么它们会更有效率?

c++ performance int double processing-efficiency
4个回答
4
投票

分配值总是比进行算术运算更快。

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甚至更好,因为在编程中重新发明轮子永远不是一个好主意


6
投票

最好的方法是信任您的编译器并使用C ++标准库函数。它们是为彼此设计的。

std::swap将获胜。

你可以使用XOR交换来获得int(它不需要临时的),但是现在它的表现仍然不如std::swap


1
投票

就我而言,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);
    }
}

0
投票
#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;
}
© www.soinside.com 2019 - 2024. All rights reserved.