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

时间:2017-04-30 14:47:23

标签: c++ templates swap

考虑这段代码。

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

2 个答案:

答案 0 :(得分:2)

  

交换值时如何指定临时变量的类型

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

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

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

auto tmp = ...;

BTW:不要使用以下划线开头的名称,后面紧跟大写字母;他们总是保留给实施。

答案 1 :(得分:0)

也许你可以使用像

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