为什么在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)
^
相关文章:
- 从向量到空指针的 memcpy(反之亦然)不起作用
- std::包含 std::函数回调的多个包装器的向量不起作用
- 将向量的大小()转换为 int 不起作用
- C++ 向量 clear() 不起作用
- 将子类添加到基类向量C++不起作用
- C ++ 11,为什么为向量定义unordered_map这个不起作用<int>?
- 为什么我的将向量保存到文件然后再次读出的方法不起作用?
- SDL-使用SDL_TEXTURE的std ::向量不起作用,数组正常工作
- 向量push_back不起作用 C++
- 全球向量变量上的外部不起作用
- 元素向量乘法 C++(代码不起作用)
- 遍历元组 c+17 样式的向量不起作用?
- 向量字符串push_back在C 中不起作用
- 对象的排序向量不起作用
- C++11 - 2 个向量之间的emplace_back不起作用
- 无符号字符迭代器的向量不起作用
- C++向量<Struct>排序不起作用
- 将多个整数添加到一个向量索引? 'Cout'不起作用
- POD变量的直接初始化不起作用,但当将变量推到向量上时,复制初始化起作用
- 反转C++中的向量不起作用