2011-11-07 44 views
1

我正在向列表中添加诸如B1,P4,B4 B2,P6 ..等字符串。我正在尝试将列表中的项目移动到堆栈或队列中,直到列表为空。因此,如果项目字母是P,我将它存储在队列中(后面或前面并不重要)。如果这封信是B,那么我将它存储在堆栈中。我尝试像这样实施,但我得到这个错误:将列表中的项目移动到堆栈或队列中

Boxes\main.cpp||In function 'int main()':| 
Boxes\main.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)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\include\c++\bits\stl_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| 
Boxes\main.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)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\include\c++\bits\stl_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; 
} 

回答

1

如果你想有一个队列,串叠改变:

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

到:

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

哦确定,这解决了公关oblem。比你非常。 – 123me