使用一次后重新分配Vector内存?

时间:2019-06-15 08:44:05

标签: c++11 vector stl destructor

我循环了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的立即数,最后一个元素的立即数不小于3存在。因此输出为: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

所以我循环时肯定有错误。

1 个答案:

答案 0 :(得分:0)

问题出在while循环((cin >> input) && (i<n))中。您正在阅读之前的下一个输入,以检查是否已读入足够的数据。因此,您的第一个输入实际上读取了六个值

4 2 1 5 3 6

第二个输入读取下一个数字5作为输入数,然后将这五个数字读取为

6 2 3 1 7

这将为您提供输出。