这段代码里面的swap的用法是啥啊,是直接交换整个数组第一个元素与后面所有的元素吗

问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图
template<class T>
void permutations(T list[],int k,int m)
{//生成list[k,m]的所有排列
    if(k==m)//仅有一个排列
    {
        copy(list,list+m+1,ostream_iterator<T>(cout,""));
        cout<<endl;
    }
    else
    {
        for(int i=k;i<=m;i++)
        {
            swap(list[k],list[i]);
            permutation(list,k+1,m);
            swap(list[k],list[i]);
        }
    }
}

运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

不是喔,是list[k]和list[i]这两个元素的交换
就是list的第k个和第i个交换

C++中swap函数

链接 https://www.cnblogs.com/love-yh/p/7365391.html