【发布时间】:2022-04-04 19:15:49
【问题描述】:
解决方案可能很简单,但我想不通。如何对向量进行永久性更改,而不仅仅是在函数内部生效的更改?我对其进行了调试,我可以看到“数字”已更新为我希望它具有的值,但它一执行就消失了。
using namespace std;
bool checkVal();
vector<int> getNumbers();
void setPowerball(vector<int> numbers);
int main()
{
srand(time(0));
vector<int> numbers = getNumbers();
setPowerball(numbers);
for (int i = 0; i < 5; i++)
{
cout << numbers[i];
cout << " ";
}
}
bool checkVal(vector<int> numbers, int size, int value)
{
for (int i = 0; i < size; ++i)
{
if (numbers[i] == value)
{
return true;
}
}
return false;
}
void setPowerball(vector<int> numbers)
{
for (int i = 4; i < 5; i++)
{
int last = rand() % 26 + 1;
if (checkVal(numbers, i, last))
{
i--;
}
else
{
numbers.push_back(last);
}
}
}
vector<int> getNumbers()
{
vector<int> numbers;
for (int i = 0; i < 4; i++)
{
int num = rand() % 69 + 1;
if (checkVal(numbers, i, num))
{
i--;
}
else
{
numbers.push_back(num);
}
}
sort(numbers.begin(), numbers.end());
return numbers;
}
【问题讨论】:
-
因为您正在传递
numbers向量的副本,因此仅对该副本进行更改。让函数取而代之的是引用。 -
与您的主题行相反,您的代码中没有名为
powerNumber()的函数。在任何情况下,如果一个函数修改了一个按值传递给它的参数,调用者将无法看到这些更改。按值传递意味着传递调用者提供的对象的副本,因此函数修改副本而不触及原始副本,并且该副本在函数返回时不再存在。您的所有函数都通过值传递其参数。 -
@Tanishq-Banyal 观点是,如果 OP 无法获得他们问题的细节,他们就不能期待一个好的答案。在软件(开发、代码等)中,大多数问题的原因在于小细节,在问题中弄错小细节会大大增加问题误导试图提供帮助的人的机会,并降低获得有用/相关答案的机会。
标签: c++