为什么在C++中,交换指针在向量中不起作用

Why does the swap through pointer not work in vector in C++?

本文关键字:向量 不起作用 指针 C++ 为什么 交换      更新时间:2023-10-16

我有以下代码:

using namespace std;
template<class T>
void myswap(T* a, T* b)
{
    T temp = *a;
    *a = *b;
        *b = temp;
}
template<class T>
void printArr(vector<T> arr)
{
    cout << "[ ";
    for(int i = 0; i < arr.size(); i++)
    {
        cout << arr[i] << " ";
    }
    cout << "]";
}
void sampleSwap(vector<int> arr)
{
    //swapping first two element
    myswap(&arr[0], &arr[1]);
    printArr(arr);
    cout << endl;
}
int main()
{
    srand(500);
    vector<int> arr;
    for(int i = 0; i < N; i++)
    {
        arr.push_back(rand() % LIMIT);
    }
    printArr(arr);
    cout << endl;
    sampleSwap(arr);
    printArr(arr);
    return 0;
}

我得到了以下输出:

[ 398 57 417 270 271 918 903 314 569 70 ]
[ 57 398 417 270 271 918 903 314 569 70 ]
[ 398 57 417 270 271 918 903 314 569 70 ]

我试图交换矢量的第一个和第二个元素。向量内容在函数中发生了更改,但在函数退出后不会保留更改。我是不是错过了什么?

通过值将vector传递给sampleSwap,因此只有main中的vector的副本会被修改。通过参考:

void sampleSwap(vector<int> &arr)
                            ^