如何在清除后将元素推送到矢量

How to push elements to vector after it is cleared?

本文关键字:元素 清除      更新时间:2023-10-16

我得到了一个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

您还需要重置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 < ki >= n时会发生什么?这意味着如果 for 循环不为空,则需要在 for 循环后再次打印my_nums 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 << " ";
    }
}

另外,请注意以下几点:

  • 为什么可变长度数组不是C++标准的一部分?
  • 为什么我不应该 #include ?
  • 为什么"使用命名空间 std;"被认为是不好的做法?
尝试在

外部循环的末尾设置"count = 0"。