使用一次后释放 Vector 内存?
Deallocating the Vector memory after using it once?
我循环了 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。
测试用例 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
所以一定是循环出错了
问题在于您在 while
循环 ((cin >> input) && (i<n)
) 中的条件。您正在阅读下一个输入 ,然后 检查您是否读入了足够的数据。所以你的第一个输入实际上读取了六个值
4 2 1 5 3 6
第二个输入读取下一个数字,5
,作为输入的数量,然后读取这五个作为
6 2 3 1 7
这将为您提供所获得的输出。
我循环了 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。
测试用例 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
所以一定是循环出错了
问题在于您在 while
循环 ((cin >> input) && (i<n)
) 中的条件。您正在阅读下一个输入 ,然后 检查您是否读入了足够的数据。所以你的第一个输入实际上读取了六个值
4 2 1 5 3 6
第二个输入读取下一个数字,5
,作为输入的数量,然后读取这五个作为
6 2 3 1 7
这将为您提供所获得的输出。