Я делаю цикл n раз, и в каждом цикле я хочу выделить память новому вектору, а после вычислений я хочу освободить память и снова хочу выделить новую в следующем цикле.
C ++ код
#include <iostream>
#include<vector>
using namespace std;
int main() {
int t;
cin >> t;
while (t--) {
int n;
cin >> n;
vector<int> arr;
int input;
int i = 0;
while ((cin >> input) && (i<n))
arr.push_back(input), i++;
for (auto i=arr.begin(), j=arr.begin()+1; i != arr.end()-1, j != arr.end(); i++, j++)
if (*j < *i)
cout << *j << " ";
else
cout << "-1" << " ";
cout << "-1" << endl;
arr.clear();
arr.shrink_to_fit();
}
return 0;
}
Ввод
2
5
4 2 1 5 3
6
5 6 2 3 1 7
Ожидаемый вывод
2 1 -1 3 -1
-1 2 -1 1 -1 -1
Объяснение:
Печать следующих ближайших меньших элементов для каждого элемента в массиве, и если не так, то печать -1.
Testcase 1:
Элементами массива являются 4, 2, 1, 5,3. Немедленно меньше 2 - сразу меньше 4, 1 - сразу меньше 2, нет немедленного меньшего 1, 3 - сразу меньше 5, и немедленного меньшего для последнего элемента не существует.Таким образом, вывод: 2 1 -1 3 -1.
Мой вывод
2 1 -1 3 -1
2 -1 1 -1 -1 //error (wrong output)
Когда я не зациклен и сделал это для одиночного тестового примера, это дает желаемый вывод.
Программа для одиночного теста
int main(){
int n;
cin>>n;
vector <int> arr;
....
....
....
arr.shrink_to_fit();
return 0;
}
Вход
6
5 6 2 3 1 7
Выход
-1 2 -1 1 -1 -1
Поэтому во время зацикливания должна быть ошибка.