初学者在这里试图理解函数的基础知识,传递我的引用和向量/数组。 我的代码将大数据文件读入矢量。然后我不知何故需要将矢量转换为数组,对数组进行排序,并读取输出。我相信我的问题在于我尝试将矢量转换为数组。
using namespace std;
//function prototype
int readInput(vector<int> &vect);
void sort(int[], int);
void showArray(int[], int);
int main()
{
vector<int> values;
int sum, avg;
sum = readInput(values);
const int SIZE = values.size(); //ISSUE LIES HERE
int arr[SIZE]; //and here
sort(arr, SIZE);
showArray(arr, SIZE);
avg = sum / values.size();
//cout << "The average is: " << avg;
return 0;
}
int readInput(vector<int> &vect)
{
int count;
int total = 0;
ifstream inputFile("TopicFin.txt"); //open file
if(!inputFile)
{
return 0; // if file is not found, return 0
}
while(inputFile >> count) //read file
vect.push_back(count); //add to file
for (int count = 0; count < vect.size(); count++)
total+=vect[count]; //sum data in vector
return total;
}
void sort(int array[], int size)
{
int startScan, minIndex, minValue;
for(startScan = 0; startScan < (size-1); startScan++)
{
minIndex = startScan;
minValue = array[startScan];
for(int index = startScan + 1; index < size; index++)
{
if (array[index] < minValue)
{
minValue = array[index];
minIndex = index;
}
}
array[minIndex] = array[startScan];
array[startScan] = minValue;
}
}
void showArray(const int array[], int size)
{
for(int count = 0; count < size; count++)
cout << array[count] << " " << endl;
}
答案 0 :(得分:5)
您无需将矢量转换为数组。您可以直接对矢量进行排序。
std::sort(values.begin(), values.end())
有关排序的更多信息:http://www.cplusplus.com/reference/algorithm/sort/
我将补充说,一般来说,你永远不应该使用数组,特别是作为一个新的C ++程序员。它们很多比矢量更复杂,并且几乎从不用于普通的C ++代码。
答案 1 :(得分:3)
让我先说一下,虽然这对于学习是一件好事,但是将向量转换为数组可能不是你应该在实际代码中做的事情。实际上,您可以使用std::sort
对矢量进行排序。
问题的根源在于,您无法使用int arr[SIZE]
语法声明在编译时未知的大小数组。
const int SIZE = values.size();
执行代码时,这个值是已知的,但在编译时却不知道。因此,与int arr[SIZE];
不同,int arr[100]
无法正常工作。要声明一个在运行时知道大小的数组,可以像
int* arr = new int[size];
然后你也被迫手动删除数组。
答案 2 :(得分:0)
正如seanmcl所说,您无需转换为数组即可进行排序。但是,如果你想要做的是编写排序函数的练习,那么你可以简单地使用values.begin(),因为向量的元素是连续的。 (对于其他容器,情况并非如此。)