std::stack
的大小是否有限制?stl堆棧對象的大小限制
我使用的是std::stack<std::pair<int,std::string>>
作爲我的籌碼,而當條目數超過約1萬元,我得到一個運行時錯誤。
這是由於對std::stack
大小的限制?
std::stack
的大小是否有限制?stl堆棧對象的大小限制
我使用的是std::stack<std::pair<int,std::string>>
作爲我的籌碼,而當條目數超過約1萬元,我得到一個運行時錯誤。
這是由於對std::stack
大小的限制?
std::stack
是一個容器適配器。它僅僅是一些其他容器的前端,使它看起來像一個堆棧。考慮到std::vector
可以像一個堆棧進行治療,如果您有push_back
和名字pop
與pop_back
替換名稱push
。因此,任何尺寸限制或類似將是支撐容器的結果,而不是std::stack
。
std::stack
的默認背襯容器是std::deque
(N3376 23.6.5.2 [stack.defn]
)。該標準要求std::deque
提供max_size
成員函數(N3376 23.3.3.1 [deque.overview]/2
),它告訴你std::deque
可以根據實現限制容納的元素的最大數量。這通常是類似std::numeric_limits<std::deque<t>::size_type>::max()
。
然而,更有可能的是,你要麼運行到機器內存的限制,還是有一些bug在你的應用程序的其他地方造成運行時錯誤。
是的,我用隨機輸入檢查我得到一個SIGXFSZ錯誤,所以它是導致錯誤的文件大小限制http://ideone.com/0McrLi – mohit
標的放置在protected
部和std::stack
容器適配器的容器can be accessed by namec
(從派生類通過全qualificated名的手段或通過引入到使用using
derective類命名空間)。 默認的基礎容器是std::deque
。 std::deque
,std::list
或std::vector
。它們都提供了max_size()
成員函數,返回最大大小可用於分配。 Authoritative source WRT max_size()
所提到的容器的成員函數表示:
注
該值通常等於到std :: numeric_limits :: MAX(),並反映了的尺寸的理論極限集裝箱。在運行時,容器的大小可能會被限制爲小於max_size()的值,大小可用RAM的數量。
因此,返回值max_size()
的智能實現可以依靠RAM來分配。
要訪問std::stack<>::c.max_size()
應該寫信std::stack<>
類派生如下:
#include <iostream>
#include <stack>
#include <cstdlib>
template< typename type >
struct my_stack
: std::stack<type>
{
using base = std::stack<type>;
using base::base;
using base::operator =;
std::size_t
max_size() const
{
return base::c.max_size();
}
};
int
main()
{
my_stack<int> s;
std::cout << s.max_size() << std::endl;
return EXIT_SUCCESS;
}
有很多的運行時錯誤的可能原因。發佈您的代碼。 – NPE
@erosenin:它看起來更像是你的堆棧分配'長'緩衝區是原因;特別是考慮到你給它一百萬的大小。自動存儲(「堆棧」)的典型實現限制是1MB(Windows)至8MB(Linux,大多數Unix)。假設這個平臺上的「long」是8個字節,那麼100萬* 8個字節= 8MB,這在大多數Unix上都會受到限制。在自動存儲中使用動態內存分配而不是數組。 –