gpt4 book ai didi

c++ - 使用基于范围的 for 循环为 vector 赋值

转载 作者:行者123 更新时间:2023-11-30 02:15:07 24 4
gpt4 key购买 nike

我正在尝试使用 for each 循环为 vector 赋值。如果我在循环 2 中将值分配给 x 后打印这些值,则顺序是正确的。

但是当我打印在循环 2 中修改过的 vector 时,该 vector 保持不变。有人可以解释吗?

我试过使用普通的for循环,然后没有问题。

无效的代码:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
vector<int> a = { -1, 150, 190, 170, -1, -1, 160, 180 };
vector<int> v;

// loop 1
for (int x : a)
{
if (x != -1)
v.push_back(x);
}
sort(v.begin(), v.end(), greater<int>());

// loop2
for (int x : a)
{
if (x != -1)
{
x = v.back();
v.pop_back();
cout << x << " ";
}
else
cout << x << " ";
}

cout << endl << endl;

// loop3
for (int x : a)
cout << x << " ";
}

当循环 2 被替换为:

for (int x = 0; x < a.size(); x++)
{
if (a[x] != -1)
{
a[x] = v.back();
v.pop_back();
}
}

实际结果:

-1 150 160 170 -1 -1 180 190

-1 150 190 170 -1 -1 160 180

期望的结果:

-1 150 160 170 -1 -1 180 190

-1 150 160 170 -1 -1 180 190

最佳答案

问题出在for循环中:

for(int x:a) { // (1)
if(x!=-1)
{
x=v.back(); // (2)
v.pop_back();
cout<<x<<" ";}
else
cout<<x<<" ";
}

x 是 a 中元素的拷贝,而不是直接元素。因此,当您更改 x (2) 时,您更改的是元素的拷贝,而不是 vector 中的元素。

如果你想改变 vector 中的元素,做

for(int& x : a)

那么 x 将是 a 中元素的引用,当 x 发生变化时,a 中相应的元素也会随之变化。

关于c++ - 使用基于范围的 for 循环为 vector 赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56610541/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com