C++ 变量没有正确地从向量接收新值?
C++ Variable not properly receiving new value from vector?
我正在尝试编写一个程序,该程序使用 int 值创建并填充一个向量,然后递归地搜索它和 returns 最小值。我已经编写并构建了代码,但它每次 returns 的最小值都非常大 - 我感觉它没有正确地将最小值分配给 int minimum
,但我不确定。有什么想法吗?
#include <iostream>
#include <conio.h>
#include <vector>
using namespace std;
int vectorSize;
int minimum;
int result = -1;
int start;
int ending;
int answer;
int test;
int recursiveMinimum(vector<int>, int, int);
void main() {
cout << "How many values do you want your vector to be? ";
cin >> vectorSize;
cout << endl;
vector<int> searchVector(vectorSize);
start = 0;
ending = searchVector.size() - 1;
for (int i = 0; i < vectorSize; i++) {
cout << "Enter value for position " << i << " " << endl;
cin >> searchVector[i];
}
for (int x = 0; x < vectorSize; x++) {
cout << searchVector[x] << " ";
}
int answer = recursiveMinimum(searchVector, start, ending);
cout << "The smallest value in the vector is: " << answer;
_getch();
}
int recursiveMinimum(vector<int> searchVector, int start, int end) {
if (start < end) {
if (searchVector[start] < minimum) {
minimum = searchVector[start]; //this part seems to not work
}
start++;
recursiveMinimum(searchVector, start, end);
}
else {
return minimum;
}
}
`
您的 minimum
变量未初始化,这会导致未定义的行为。它应该设置为向量中的第一个值:
minimum = searchVector[0];
int answer = recursiveMinimum(searchVector, start, ending);
此外,ending
相差一个,这使得它选择 6
作为 [6, 9, 8, 4]
中的最小值。
因此,最终,您的代码应如下所示:
minimum = searchVector[0];
int answer = recursiveMinimum(searchVector, start, ending + 1); // note the + 1
虽然与问题无关,但我建议您在 recursiveMinimum
中使用尾调用,如 explained here:
start++;
return recursiveMinimum(searchVector, start, end);
主要问题是您没有初始化 minimum
。因此,比较 searchVector[start] < minimum
可能永远不会变为真,并且最小值仍未初始化。
作为快速修复,写 int minimum = MAX_INT;
而不是 int minimum;
。 MAX_INT
是最大正整数值(在 limits.h
中定义)。所以你的数组中的值永远不会大于这个值,你的最小搜索循环将起作用(除非有其他问题;但是为此,请咨询调试器:-))
我正在尝试编写一个程序,该程序使用 int 值创建并填充一个向量,然后递归地搜索它和 returns 最小值。我已经编写并构建了代码,但它每次 returns 的最小值都非常大 - 我感觉它没有正确地将最小值分配给 int minimum
,但我不确定。有什么想法吗?
#include <iostream>
#include <conio.h>
#include <vector>
using namespace std;
int vectorSize;
int minimum;
int result = -1;
int start;
int ending;
int answer;
int test;
int recursiveMinimum(vector<int>, int, int);
void main() {
cout << "How many values do you want your vector to be? ";
cin >> vectorSize;
cout << endl;
vector<int> searchVector(vectorSize);
start = 0;
ending = searchVector.size() - 1;
for (int i = 0; i < vectorSize; i++) {
cout << "Enter value for position " << i << " " << endl;
cin >> searchVector[i];
}
for (int x = 0; x < vectorSize; x++) {
cout << searchVector[x] << " ";
}
int answer = recursiveMinimum(searchVector, start, ending);
cout << "The smallest value in the vector is: " << answer;
_getch();
}
int recursiveMinimum(vector<int> searchVector, int start, int end) {
if (start < end) {
if (searchVector[start] < minimum) {
minimum = searchVector[start]; //this part seems to not work
}
start++;
recursiveMinimum(searchVector, start, end);
}
else {
return minimum;
}
}
`
您的 minimum
变量未初始化,这会导致未定义的行为。它应该设置为向量中的第一个值:
minimum = searchVector[0];
int answer = recursiveMinimum(searchVector, start, ending);
此外,ending
相差一个,这使得它选择 6
作为 [6, 9, 8, 4]
中的最小值。
因此,最终,您的代码应如下所示:
minimum = searchVector[0];
int answer = recursiveMinimum(searchVector, start, ending + 1); // note the + 1
虽然与问题无关,但我建议您在 recursiveMinimum
中使用尾调用,如 explained here:
start++;
return recursiveMinimum(searchVector, start, end);
主要问题是您没有初始化 minimum
。因此,比较 searchVector[start] < minimum
可能永远不会变为真,并且最小值仍未初始化。
作为快速修复,写 int minimum = MAX_INT;
而不是 int minimum;
。 MAX_INT
是最大正整数值(在 limits.h
中定义)。所以你的数组中的值永远不会大于这个值,你的最小搜索循环将起作用(除非有其他问题;但是为此,请咨询调试器:-))