为什么语句的输出是2
不同于声明1
?
// a is of type vector < tuple <int, int> >
for (auto i: a)
{
get<0>(i)+=get<1>(i);
cout << get<0>(i) << " " << get<1>(i) << endl; // 1
}
for (auto i: a) cout << get<0>(i) << " " << get<1>(i) << endl; // 2
假设最初,a
包含 [7, 3] , [9, 1]
然后 1
输出
10 3
10 1
鉴于2
输出
7 3
9 1
简而言之,循环封闭语句1
好像没有效果。
我认为这与我对auto
的使用有关并且不使用 *i
更改值,但我认为我们不能使用 *i
在 get
.
最佳答案
因为当你这样做时:
for (auto i: a)
您正在为 a
中的每个元素制作拷贝。您正在按值迭代并修改容器元素的本地拷贝。如果你想真正修改容器的元素,你必须通过引用迭代:
for (auto& i : a)
^^^
auto
不推导出引用。
关于c++ - 为什么我的代码中 get<>() 分配的值会在构造之外发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32850310/