2017-02-21 18 views
2

这是我第一次尝试使用两个堆栈创建一个队列。我不知道我是否在正确的轨道上,因为我由于'=': cannot convert from 'void' to 'int'错误而无法检查我的工作。错误在于这一行:x = enQ.pop();。 enQ不是一个函数,那么它怎么会是空的?尝试使用堆栈创建队列。为什么我得到一个无效的int转换错误?


我的代码当然还没有完成。

stack<int> enQ; 
stack<int> deQ; 

void enQueue(int x) { 
    enQ.push(x); 
    cout << x << " has been added to the queue." << endl; 
} 

void deQueue() { 
    while (enQ.size() != 0) { 
     int x; 
     x = enQ.pop(); 
     enQ.pop(); 
     deQ.push(x); 
     cout << x << " had been pushed to DEQUEUE" << endl; 
    } 
} 
+1

'enQ.pop'是函数,它有返回类型'void'。 –

回答

1

因为函数std::stack::pop返回任何(即,其返回类型是void)。

你可以改变

x = enQ.pop(); 

x = enQ.top(); 
enQ.pop(); 
+0

这证明苏斯博士几乎是正确的。正确答案是[Top on Pop](https://en.wikipedia.org/wiki/Hop_on_Pop)。 – user4581301

1

您可以检查这个帖子,看看为什么STL分离T kind_of_pop_and_get()poptop。前者仅删除堆栈中的顶层元素,后者仅仅是复制顶层元素而不触摸堆栈。

Why doesn't std::queue::pop return value.?

总之,它是异常安全

kind_of_pop_and_get()将执行从堆栈

  • 移除元件。
  • 然后将元素返回到接收器的copy assignment/constructor

异常可能在对象构造期间抛出,并启动堆栈展开。然后,即使kind_of_pop_and_get()调用未完成,堆栈状态也会受到影响。

相关问题