Как взять входные данные с пробелами и преобразовать их в вектор int без sstream

#c

Вопрос:

Я просто пытаюсь решить вопрос : ВОПРОС

Поэтому я построил большую часть кода, но не понял, как преобразовать строку с пробелами, содержащими int, в вектор int без sstream, поскольку ограничение по времени составляет 1 секунду, каков наиболее эффективный способ это сделать. Мой код

 #include <iostream>
#include <map>
#include <vector>
using namespace std;
typedef long long int ll;
map<int, int> Solution(map<int, int> Stack, vector<int> cmnd, int height)
{
    int Pos = 1;
    bool IsBoxTaken = false;
    for (int i = 0; i < cmnd.size(); i  )
    {
        if (cmnd[i] == 0)
        {
            return Stack;
        }
        else if (cmnd[i] == 1 amp;amp; Pos>=1)
        {
            Pos--;
        }
        else if (cmnd[i] == 2 amp;amp; Pos<Stack.size())
        {
            Pos  ;
        }
        else if (cmnd[i] == 3)
        {
            if(Stack[Pos]==0){continue;}
            if(IsBoxTaken==false)
                Stack[Pos] -= 1;
                IsBoxTaken = true;
        }
        else if (cmnd[i] == 4)
        {
            if(Stack[Pos]==height){continue;}
            if(IsBoxTaken==true)
                Stack[Pos]  = 1;
                IsBoxTaken = false;
        }
    }
}
int main(int argc, char *argv[])
{
    ios_base::sync_with_stdio(false);
    cin.tie();
    cout.tie();
    //Height
    int Height;
    //No. Of Stacks
    int StacksSize;
    cin >> StacksSize >> Height;
    //Map To Store Stacks
    map<int, int> Stack;
    for (int i = 1; i <= StacksSize; i  )
    {
        int Dat;
        cin>>Dat;
        Stack[i]=Dat;
    }
    string x;
    getline(cin,x);
    //Now I Want To Convert The String Into Vector of int
    vector<int>Cmnd;
    Stack = Solution(Stack, Cmnd, Height);
    for (int i = 1; i <= Stack.size(); i  )
    {
        cout << Stack[i] << " ";
    }
}
 

Комментарии:

1. Вместо getline этого вы могли бы использовать while (cin >> x) { Cmnd.push_back(x); }

2. @JohnnyMopp будет ли это работать, если пользователь нажмет enter после ввода всех цифр?

3. Неважно, я только что прочитал описание. 0 это всегда последнее число: while (cin >> x amp;amp; x != 0) { Cmnd.push_back(x); }

4. for (int i = 1; i <= Stack.size(); i ) очень хрупкая. Вместо этого используйте цикл ranged for, например for (auto constamp; pair : Stack) { std::cout << pair.second << ' '; }.

5. Ваш отступ в Solution функции вводит в заблуждение.