清除后如何将元素推入向量?

时间:2019-07-18 12:58:45

标签: c++ algorithm c++11 reverse stdvector

为我提供了n个元素的数组,并给出了一个整数K。我必须以相反的顺序打印K元素的子数组

我将元素存储在向量中并增加了计数。一旦计数等于K,就以相反的顺序打印向量并清除向量的所有元素。

#include <iostream>
#include<bits/stdc++.h>
using namespace std;

int main() 
{
    int t; // No of test cases
    cin >> t;
    while (t--)
    {
        // Size of array and The size of each group
        int n, k;
        cin >> n >> k;
        int arr[n];
        for (int i = 0; i < n; i++)
        {
            cin >> arr[i];
        }
        vector <int> my_nums;
        int count = 0;
        for (int i = 0; i < n; i++)
        {
            my_nums.push_back(arr[i]);
            count++;
            if (count == k)
            {
                for (auto it = my_nums.rbegin(); it != my_nums.rend(); ++it)
                {
                    cout << *it << " ";
                }
                //Clear all elements in vector
                my_nums.clear();
            }
        }
        cout << endl;
    }
    return 0;
}
ex:
I/P:
1
8 3
1 2 3 4 5 6 7 8

Expected O/P:
3 2 1 6 5 4 8 7

Actual O/P:
3 2 1

2 个答案:

答案 0 :(得分:3)

您还需要重置count。除此之外,my_nums向量应在打印其中的元素后清除。

count++;
if (count == k)
{
    for (auto it = my_nums.rbegin(); it != my_nums.rend(); ++it)
    {
        cout << *it << " ";
    }
    my_nums.clear();  // moved to here
    count = 0;   // --> reset here
}

但是当count < k却是i >= n时会发生什么?这意味着如果my_nums不为空,则需要在for循环之后再次打印my_nums,以获得完整的结果。

for (int i = 0; i < n; i++)
{
    // above code
}

if (!my_nums.empty())
{
    for (auto it = my_nums.rbegin(); it != my_nums.rend(); ++it)
    {
        cout << *it << " ";
    }
}

另外,请注意以下内容:

答案 1 :(得分:0)

尝试在外循环的末尾设置“ count = 0”。

相关问题