如何以通用方式交换两个值?

How to swap two value in generic way?

考虑这段代码。

template<typename E>
void swap(E &_Left, E &_Right){
    E tmp = _Left;
    _Left = _Right;
    _Right = tmp;
}

template<typename E>
void bubble_sort(E begin, E end){
    for(E i = begin; i != end - 1; ++i){
        for(E j = end - 1; j != i; --j){
            if(*j < *(j-1)){
                 swap(*j, *(j - 1)); // here
            }
        }
    }
}

我知道swap函数是如何实现的。但是如果我不想用一个函数来交换值,交换值时如何指定临时变量的类型。 template也想要

也许你可以使用像

这样的东西
auto &temp = *(j-1);
*(j-1) = *i;
*i = temp;

how to specify the type of temporary variable when swapping the values

如果要明确指定类型,可以使用std::iterator_traits:

typename std::iterator_traits<E>::value_type tmp = ...;

从C++11开始,可以直接使用auto,比如

auto tmp = ...;

顺便说一句:不要使用以下划线开头紧跟大写字母的名称;他们总是保留给实施。