从 foreach 中更改一对值不会显示循环外的更改
Changing value in a pair from foreach doesn't show change out of loop
我在 for-each 循环之外有一个对象,它包含一对静态向量。
我想增加该对的第二个参数,如下面的代码所示。但是,当我从另一个 for-each 循环中打印第二个参数时,它会打印“0”作为向量中所有元素的值。但是,如果我从第一个 for-each 循环中打印,它会按预期打印“1”。
我不明白为什么更改后值不保存。
我已经查过了,for-each 允许我更改值以及对。
char[] name = "abcde";
for(int i =0;i<5;i++){
std::pair <string, int> pairCounter;
pairCounter = make_pair(name[i], 0);
outside::lstPairCounter.push_back(pairCounter);
}
for each (pair<string,int> counter in outside::lstPairCounter){
counter.second++;
}
for each (pair<string,int> counter in outside::lstPairCounter){
cout<<counter.second<<'\n';
}
通过引用而不是值获取元素:
for (std::pair<string,int>& counter : outside::lstPairCounter){
counter.second++;
}
不要使用
for each
最好(参见 https://msdn.microsoft.com/en-us/library/ms177202.aspx),因为它是非标准的。
C++11 中 for each 循环的工作原理如下:
std::vector<int> v{1,2,3,4,5};
// i becomes a COPY of each value in v, i.e. no changes occur in v
for(int i : v)
++i;
// i becomes a reference to the values in v, changes DO occur in v
for(int& i : v)
++i;
// you could also take a const-reference, good for expensive-to-copy types
for(const T& t: other_vector)
// do stuff
我在 for-each 循环之外有一个对象,它包含一对静态向量。 我想增加该对的第二个参数,如下面的代码所示。但是,当我从另一个 for-each 循环中打印第二个参数时,它会打印“0”作为向量中所有元素的值。但是,如果我从第一个 for-each 循环中打印,它会按预期打印“1”。
我不明白为什么更改后值不保存。 我已经查过了,for-each 允许我更改值以及对。
char[] name = "abcde";
for(int i =0;i<5;i++){
std::pair <string, int> pairCounter;
pairCounter = make_pair(name[i], 0);
outside::lstPairCounter.push_back(pairCounter);
}
for each (pair<string,int> counter in outside::lstPairCounter){
counter.second++;
}
for each (pair<string,int> counter in outside::lstPairCounter){
cout<<counter.second<<'\n';
}
通过引用而不是值获取元素:
for (std::pair<string,int>& counter : outside::lstPairCounter){
counter.second++;
}
不要使用
for each
最好(参见 https://msdn.microsoft.com/en-us/library/ms177202.aspx),因为它是非标准的。
C++11 中 for each 循环的工作原理如下:
std::vector<int> v{1,2,3,4,5};
// i becomes a COPY of each value in v, i.e. no changes occur in v
for(int i : v)
++i;
// i becomes a reference to the values in v, changes DO occur in v
for(int& i : v)
++i;
// you could also take a const-reference, good for expensive-to-copy types
for(const T& t: other_vector)
// do stuff