使用基于范围的 for 循环为矢量赋值
Assigning values to a vector using a range-based for-loop
我正在尝试使用 for each 循环为向量赋值。如果我在将值分配给循环 2 中的x
后打印值,则顺序是正确的。
但是当我打印在循环 2 中修改的矢量时,矢量保持不变。有人可以解释一下吗?
我尝试使用正常的 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) 时,您更改的是元素的副本,而不是向量中的元素。
如果要更改向量中的元素,请执行
for(int& x : a)
然后 x 将是对 a 中元素的引用,当 x 如果更改时,A 中的相应元素也会更改。
相关文章:
- 如何在C++中从两个单独的for循环中添加两个数组
- 为什么我的for循环不能正确获取argv
- 在基于范围的for循环中使用结构化绑定声明
- 通过for循环使用用户输入填充列表
- 使用for循环检查数组中的重复项
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 正在使用for循环创建QScatterSerie
- Python中的for循环与C++有何不同
- 在更改for循环的第三部分后,未使用for循环结果
- 在 for 循环中查找问题时遇到困难
- 嵌套for循环C++的问题(初学者)
- 如何用for循环在c++中生成单词三角形
- 如何在for循环中包含两个索引值的测试条件
- 带有多个独立参数的C++For循环
- C++ Python 循环"for i, num in enumerate(list):"版本
- C 多循环 for () 基础知识
- 没有条件值的 FOR 循环"for (int i = 1; ; i++)"无法正常工作
- 为用户提供循环for循环的选项
- 打破循环for循环