2015-12-16 2 views
3

Так что я делаю вопрос в leetcode. Это реализация стека с использованием очередей. Если я отправлю этот код ниже. Это принято.То же выражение, но другой результат

class Stack { 
    public: 
    queue<int> que; 
    // Push element x onto stack. 
    void push(int x) { 
     que.push(x); 
     for(int i=0;i<que.size()-1;i++){ 
      que.push(que.front()); 
      que.pop(); 
     } 
    } 

    // Removes the element on top of the stack. 
    void pop() { 
     que.pop(); 
    } 

    // Get the top element. 
    int top() { 
     return que.front(); 
    } 

    // Return whether the stack is empty. 
    bool empty() { 
     return que.empty(); 
    } 
}; 

, но если я только изменить for(int i=0;i<que.size()-1;++i) к for(int i=0;i<=que.size()-2;i++), я получил временное ограничение превышено. Последний выполненный вход: push (1), empty(). Может ли кто-нибудь сказать мне, почему ??? Спасибо

+4

Что произойдет, если 'que.size()' = 1? (подсказка - ничего хорошего) – BoBTFish

+0

они не совпадают с выражением – user463035818

+0

В этом случае он не войдет в цикл, что нужно делать. @ BoBTFish –

ответ

5

queue::size() возвращает size_t, который является в основном беззнаковым числом. и отрицательный номер без знака преобразует в огромное количество.

Так queue::size()-1 -> огромное количество (0xFFFFFFFF)

+0

Он возвращает 'queue :: size_type', но я просто педантичен. – BoBTFish

Смежные вопросы