2

我需要创建一个交换函数来交换 T 类型的两个参数。

以下是我编写的代码,但一定有问题。

有人可以改进我的代码吗?

template<typename T>
void swap (T& a, T& b)
{ T temp = a;
  a = b;
  b = temp;
}

我应该将它作为常量引用传递吗?但我正在改变价值观,对吗?

请让我知道,谢谢!!

4

3 回答 3

0

如果您的编译器支持它,您应该通过右值引用传递您的参数并使用它std::move来转换为右值:

template <class T>
void swap(T&&, T&&);

int main()
{
    int n(0);

    swap(std::move(n), 5); // n is now 5
}

在您的代码中,这是不可能的,因为左值不能绑定到右值。但是忽略这个小功能,您的代码就可以了。

于 2013-04-26T01:51:52.610 回答
0

您可能遇到的问题是交换函数的命名。尝试将其命名为 mySwap。我曾经遇到过同样的问题。交换函数是在 c++ 中预定义的;

于 2014-02-08T21:10:40.210 回答
-2

使用 STL 提供的标准交换。

于 2014-02-08T21:42:53.220 回答