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上都会受到限制。在自动存储中使用动态内存分配而不是数组。 –