C++ 使用基于范围的for循环为向量赋值
我试图使用for-each循环为向量赋值。如果在循环2中将值指定给C++ 使用基于范围的for循环为向量赋值,c++,c++11,C++,C++11,我试图使用for-each循环为向量赋值。如果在循环2中将值指定给x后打印这些值,则顺序正确 但当我打印在循环2中修改过的向量时,该向量保持不变。有人能解释一下吗 我试着使用正常的for循环,然后就没有问题了 不起作用的代码: #include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { vector<int> a
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 << " ";
}
预期结果:
-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发生变化时,a中相应的元素也会发生变化。什么是(1)
?
-1 150 160 170 -1 -1 180 190
-1 150 160 170 -1 -1 180 190
for(int x:a) { // (1)
if(x!=-1)
{
x=v.back(); // (2)
v.pop_back();
cout<<x<<" ";}
else
cout<<x<<" ";
}
for(int& x : a)