从 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