gpt4 book ai didi

c++ - 为什么通过指针交换在 C++ 中的 vector 中不起作用?

转载 作者:行者123 更新时间:2023-11-30 02:41:10 24 4
gpt4 key购买 nike

我有以下代码:

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 的第一个和第二个元素。 vector 内容在函数中发生变化,但在函数退出后不会保留更改。我错过了什么吗?

最佳答案

您通过了 vector按值到 sampleSwap , 所以只有 vector 的拷贝你在main被修改。而是通过引用传递:

void sampleSwap(vector<int> &arr)
^

关于c++ - 为什么通过指针交换在 C++ 中的 vector 中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28388880/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com