首页 > 解决方案 > std::pair 的奇怪行为

问题描述

完全不明白,为什么这段代码:

vector<int>v={1,2,3,4,5};
vector<pair<int,int>> pairs;
pairs.push_back(make_pair(1, 1));
for (auto el:v) {
   for (auto p:pairs) {
      pairs[0].second++;
      cout<<p.second;
   }
}

打印 "12345",这段代码:

vector<int>v={1,2,3,4,5};
vector<pair<int,int>> pairs;
pairs.push_back(make_pair(1, 1));
for (auto el:v) {
   for (auto p:pairs) {
      p.second++;
      cout<<p.second;
   }
}

打印“22222” (唯一的区别是在p.second++ 上 更改pairs[0].second ++ )

标签: c++c++11foreachc++17std-pair

解决方案


在第二个循环中,您增加元素的副本。利用

for(auto& …

推荐阅读