如何以通用方式交换两个值?
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 = ...;
顺便说一句:不要使用以下划线开头紧跟大写字母的名称;他们总是保留给实施。
考虑这段代码。
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 = ...;
顺便说一句:不要使用以下划线开头紧跟大写字母的名称;他们总是保留给实施。