将项目从列表移动到堆栈或队列

Moving items from List to either a Stack or Queue

本文关键字:堆栈 队列 移动 项目 列表      更新时间:2023-10-16

我正在添加字符串,如B1, P4, B4 B2, P6 ..等等。我试图将项目从列表移动到堆栈或队列,直到列表为空。因此,如果项目字母是P,我将其存储在队列中(后或前无关紧要)。如果字母是B,那么我将它存储在一个堆栈中。我试着像这样实现它,但我得到这个错误:

Boxesmain.cpp||In function 'int main()':|
Boxesmain.cpp|54|error: no matching function for call to 'std::queue<std::list<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::deque<std::list<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::allocator<std::list<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::|
c:program files (x86)codeblocksmingwbin..libgccmingw324.4.1includec++bitsstl_queue.h|218|note: candidates are: void std::queue<_Tp, _Sequence>::push(const typename _Sequence::value_type&) [with _Tp = std::list<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, _Sequence = std::deque<std::list<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::allocator<std::list<std::b|
Boxesmain.cpp|56|error: no matching function for call to 'std::stack<std::list<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::deque<std::list<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::allocator<std::list<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::|
c:program files (x86)codeblocksmingwbin..libgccmingw324.4.1includec++bitsstl_stack.h|182|note: candidates are: void std::stack<_Tp, _Sequence>::push(const typename _Sequence::value_type&) [with _Tp = std::list<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, _Sequence = std::deque<std::list<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::allocator<std::list<std::b|

如有任何建议,我将不胜感激。

我有:

#include <iostream>
using namespace std;
#include <list> 
#include <queue>
#include <stack>
template <typename T>                       // prototype for client function
void print(list<T> &);
int main()
{
    list<string> lst;
    queue< list<string> > package;
    stack< list<string> > box;
    string choice, str;
    string::size_type pos,  start_position=0;
    bool choice_flag = true;
    do{
        cin >> choice;
        if(choice == "QUIT"){
            choice_flag = false;
            break;
        }
        else{
            lst.push_back(choice);
        }
    }while(choice_flag);
    cout << "the size of the list is " << lst.size() << endl;
    if (lst.empty() == true)
        cout << "the list is empty" << endl << endl;
    else
        cout << "the list is not empty" << endl << endl;
    print(lst);
    // attempt to move from list lst and push onto queue or stack
    while(!lst.empty()){
        str = lst.front();
        if(str.find('P' ,0))
            package.push(str);
        else
            box.push(str);
    }
    return 0;
}
 

如果你想要一个队列和堆栈的字符串更改:

queue< list<string> > package;
stack< list<string> > box;

:

queue< string > package;
stack< string > box;