我正在尝试实现一种排序算法,其中向量被传递到函数并被修改。但是,在打印时,更改不会持续存在。请忽略未实现完整的simpleSort这一事实(目标是实现quickSort)。这个问题与矢量行为有关。我检查过的一些资源是: Passing vectors by reference Passing vector by reference Passing a vector by reference to function, but change doesn't persist
我认为我正在做他们所说的,但我遗漏了一些基本的东西。 以下是代码示例:
#include "stdafx.h"
#include <iostream>
#include <vector>
void simpleSort(std::vector<float>& theta , int);
void printArray(std::vector<float> & arr, int size)
int main()
{
std::vector<float> theta;
theta.push_back(10);
theta.push_back(-5);
theta.push_back(-3);
simpleSort(theta, theta.size()-1);
printf("Sorted array: \n");
printArray(theta, theta.size());
system("pause");
return 0;
}
void simpleSort(std::vector<float>& theta, int n)
{
for (int i = 0; i < n ; ++i)
{
if (theta[i] < theta[i + 1]) std::swap(theta[i], theta[i + 1]);
}
}
void printArray(std::vector<float> & arr, int size)
{
int i;
for (i = 0; i < size; i++)
printf("%d ", arr[i]);
printf("\n");
}
可以看出,输入 {10,-5,-3} 。在main中打印结果时得到的是 {0,0,0} 。但如果我在函数本身中打印矢量,我会得到 { - 5,-3,10} 。
我以为我通过使用&#34;&amp;&#34;正确地通过引用传递了向量,但我想情况并非如此。
答案 0 :(得分:0)
唯一的问题是你的printArray。您正在使用&#34;%d&#34;,但您的向量是浮点数,因此您需要%f。