为什么这在正常的 for 循环中工作而不是基于范围的 for 循环?
Why is this working in a normal for loop but not a range based for loop?
void set_fee(Patron p, int fee)
{
for (Patron x : patrons)
{
if (p.get_name() == x.get_name()) x.set_fee(fee);
}
for (int i = 0; i < patrons.size(); i++)
{
if (patrons[i].get_name() == p.get_name()) patrons[i].set_fee(fee);
}
}
所以 patron
只是一些 class 我做的和 none 这里的功能真的很重要 get_name()
只是 returns 对象的名称和 set_fee(fee)
只是将对象的 fee
设置为费用。
但是有人知道为什么第一个循环不起作用而第二个循环起作用吗?我基本上只想在 patrons
向量中寻找 p
,找到它后我想更改向量中赞助人对象的费用,但第一种方法不起作用,为什么?
基于范围的 for 循环中的 x
是向量中元素的副本。你需要在那里参考
for (Patron& x : patrons)
// ^^^^^^^^
{
// ....
}
否则 x.set_fee(fee);
将在 copy 上调用。
void set_fee(Patron p, int fee)
{
for (Patron x : patrons)
{
if (p.get_name() == x.get_name()) x.set_fee(fee);
}
for (int i = 0; i < patrons.size(); i++)
{
if (patrons[i].get_name() == p.get_name()) patrons[i].set_fee(fee);
}
}
所以 patron
只是一些 class 我做的和 none 这里的功能真的很重要 get_name()
只是 returns 对象的名称和 set_fee(fee)
只是将对象的 fee
设置为费用。
但是有人知道为什么第一个循环不起作用而第二个循环起作用吗?我基本上只想在 patrons
向量中寻找 p
,找到它后我想更改向量中赞助人对象的费用,但第一种方法不起作用,为什么?
基于范围的 for 循环中的 x
是向量中元素的副本。你需要在那里参考
for (Patron& x : patrons)
// ^^^^^^^^
{
// ....
}
否则 x.set_fee(fee);
将在 copy 上调用。