【问题标题】:Strange behavior of std::pair [duplicate]std::pair 的奇怪行为 [重复]
【发布时间】:2021-11-19 00:24:41
【问题描述】:

完全不明白,为什么是这样的代码:

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++

【问题讨论】:

  • for (auto p : pairs) 中,ppairs 中元素的副本,而pairs[0] 绝对是pairs 中的实际元素。使用 ``for (auto &p :pairs)` 来引用 pairs 中的元素。

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


【解决方案1】:

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

for(auto& …

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-21
    • 2018-01-04
    • 2011-03-06
    • 2020-06-11
    • 2013-03-05
    • 1970-01-01
    相关资源
    最近更新 更多