温馨提示:本文翻译自stackoverflow.com,查看原文请点击:c++ - Why doesn't range-based for loop modifiy container elements?
c++ c++11 auto

c++ - 为什么不基于范围的循环修改容器元素?

发布于 2020-03-27 11:21:03

我最近发现修改自动迭代向量中的数据不会为我产生正确的结果。例如,当我尝试对vector的vector元素进行排序时,某些元素未排序,但代码成功运行

vector<vector<int> > arr;
arr.push_back({38, 27});
for(auto v : arr)
{
    sort(v.begin(), v.end());
}

排序后,上述代码的输出仍然是38、27。而当我排序为sort(arr [0] .begin(),arr [0] .end())时,结果是正确的。我用gcc编译。

查看更多

查看更多

提问者
Kshitij Shukla
被浏览
179
Demosthenes 2019-07-03 22:41

您的for循环复制v,然后对其进行排序。原稿未触碰。你想要的是for (auto &v : arr)