考虑这段代码。
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
。
答案 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;