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

标签 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函数是如何实现的。但是如果我不想使用函数来交换值,那么在交换值时如何指定临时变量的类型。还需要模板

最佳答案

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 = ...;

顺便说一句:不要使用以下划线开头并紧跟大写字母的名称;它们始终保留给实现。

关于c++ - 如何以通用方式交换两个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43707666/

相关文章:

c++ - 类范围内的类模板特化?

c++ - 如何在 boost::spirit::qi 语法中实现#ifdef?

c++ - 错误 : "initializer expression list treated as compound expression"

php - WooCommerce 函数 wc_get_template() 修改

c++ - 我做了什么?需要在模板类的方法中实例化派生类

java - 在Java中使用构造函数和新对象

c - 使用 void 的通用交换尝试**

c - 你如何交换矩阵中的两行(在 C 中)?

c++ - 如何在 C++ 中读取 .raw 文件

c++ - 从可变宏参数创建成员