为什么通过指针交换在 C++ 中的向量中不起作用?
Why does the swap through pointer not work in vector in C++?
我有以下代码:
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)
^
我有以下代码:
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)
^