Я пытаюсь присвоить значения вектору, используя для каждого цикла. Если я распечатаю значения после присвоения их x
в цикле 2, порядок будет правильным.
Но когда я печатаю вектор, который был изменен в цикле 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