2016-04-29 52 views
0

我在模板類堆棧中定義的deque對象的堆棧值時遇到問題。當初始化類堆棧對象並在初始化對象上使用STL deque類的push_back()成員函數並讀取堆棧內的元素數時,我得到零,但終端告訴我它將值推入其中。它看起來如下:不同C++:在類堆棧中使用deque成員函數

棧頭文件

#ifndef STACK_HH 
#define STACK_HH 

#include <iostream> 
#include <deque> 

template<class T> 
class Stack { 

    public: 
     Stack(): s() { // <-- creating an empty deque s 
      s.size() ; 
      nitems() ; 
      empty() ; 
     } 

     ~Stack() {       
      nitems() ; 
      empty() ; 
     } 

     //Member functions 
     int nitems() { return s.size() ; } 
     bool empty() { return (s.size()==0) ; } 

     void push_back(T c) { 
      s[s.size()] = c ; 
     } 

     T back() { 
      return s[s.size()] ; 
     } 

     void pop_back() { 
      if (empty()) { 
       std::cout << "Stack::pop() Error: stack is empty" << std::endl ; 
      }  
     } 

    private: 
     std::deque<T> s ; 

}; 

#endif 

主要腳本

#include <iostream> 
#include <deque> 
#include "Stack.h" 

using namespace std ; 

// Main 
int main() { 

    int LEN = 10; 

    Stack<double> s ; 

    // Write doubles into Stack 
    for (int i=0 ; i<LEN ; i++) {   
     cout << "pushing value " << i*i << " in stack s" << endl ; 
     s.push_back(i*i) ; 
    } 

    // Count doubles in fifo 
    cout << s.nitems() << " value(s) in stack" << endl ; 

    return 0 ; 
} 

我)不知道我是否應該定義雙端隊列的push_back(,回()和pop_back()函數在我的堆棧頭文件。像void deque < T> :: push_back()和其他類似的東西。但是這並沒有解決它,因爲我已經期待使用s.pushback()也沒有工作。

任何幫助解決這個問題,慷慨讚賞。

編輯:

謝謝大家的幫助。

回答

1

你的確可以直接使用deque方法類似:

template<class T> 
class Stack { 

    public: 
     Stack(): s() { // <-- creating an empty deque s 
     } 

     ~Stack() {       
     } 

     //Member functions 
     int nitems() const { return s.size() ; } 
     bool empty() const { return s.empty() ; } 

     void push_back(const T& c) { 
      s.push_back(c) ; 
     } 

     const T& back() { 
      return s.back(); 
     } 

     void pop_back() { 
      if (empty()) { 
       std::cout << "Stack::pop() Error: stack is empty" << std::endl ; 
      } 
      s.pop_back(); 
     } 

    private: 
     std::deque<T> s ; 
}; 
1

爲什麼不是std::stack


分配到s[s.size()]不添加新的元素:

不像的std ::地圖::操作符[],該操作員從未插入一個新元素插入到容器中。

http://en.cppreference.com/w/cpp/container/deque/operator_at

使用s.push_back(new_element)添加新元素。


最後一個元素是s[s.size() - 1],或者更好,s.back()


s.size()s.size()empty()在構造函數和析構函數什麼也不做。