在 ISO/IEC 14882:2011 及更新版本中,引入了 swap
函数模板对数组参数的特化,它等价于:
template <class T, size_t N>
void swap(T (&a)[N], T (&b)[N])
{
for (size_t i = 0; i < N; i++)
swap(a[i], b[i]);
}
它在竞赛中几乎没有用,但其复杂度是 ,故不慎使用它可能拖慢程序,进而导致超时。
无
在代码中插入:
using std::swap;
template <class T, size_t N>
void swap(T (&x)[N], T (&y)[N]);
这样,在试图 swap
两数组时,编译会因为无法解析重载函数而失败。
在试图 swap
两数组时,除非数组很小,否则取指向它们首元素的指针再进行交换会更加高效。例如,
int a[100], b[100];
int main()
{
int *a = ::a, *b = ::b;
// ...
if (condition)
swap(a, b);
// ...
return 0;
}