2012-03-15 30 views
0

如何將一個模板化的類(稱爲Stack)的末尾函數編寫爲一個超出數組邊界的實現?使用模板化堆棧編寫迭代器

這是我目前end()函數:

template<typename T> 
StackIterator<T> Stack<T>::end() const 
{ 
    //iterator takes a stack and an item of type <T> 
    StackIterator<T> goodBye(*this, items[-1]); 
    return goodBye; 
}//end end function 

該電流實施,將基本類型的工作,但投用字符串使用時,在存儲位置 bad_alloc的(......)。

關於如何使這更多功能的任何想法?

回答

0

它不應該是items[-1]。對於大小爲n的數組,它應該是items[n]。在C++ 11中,您可以找到可以完成這項工作的std::end

當然,你可以使用std::stack ...但是嘿。

編輯:迭代在普通意義上只適用於本地數組在一個方向。如果您希望反向遍歷本機陣列,則必須從正向[begin, end)範圍開始並從那裏實施反向迭代。

+0

但是這意味着我會從堆棧底部向上迭代,而不是從頂部向下。我意識到可以使用std :: stack,但作業的任務是從頭開始創建它。 – D1990c 2012-03-15 20:58:51

+0

@ D1990c:您的實施應該反轉該方向性。數組前進。 – 2012-03-15 20:59:45

+0

無論數組遍歷的方式如何,當數組在每個位置都有元素時嘗試執行此操作時會發生相同的錯誤 – D1990c 2012-03-15 21:22:17