std::size和std::map的最大大小是多少?是否有方法可以增加这个数字?
谢谢!
您可以通过调用标准库容器的Container::max_size()
函数获取其最大大小。如果您需要在编译时获取理论上的最大大小值,请使用std::numeric_limits<Container::size_type>::max()
。
max_size()
返回std::numeric_limits<size_type>::max()
并不意味着用户可以直接使用std::numeric_limits<size_type>::max()
来确定容器的最大大小。 - AnT stands with Russiamax_size()
返回size_type
;numeric_limits<size_type>::max()
返回constexpr size_type
。我认为两者都是相同的类型,因此都是代表相同概念的数字 - 但一个考虑了运行时环境,而另一个在编译时解决。 - Griwessize_type
用于表示元素的数量,而不是它们的总大小(以字节为单位)。这是一个巨大的误解。 - Griwesstd::numeric_limits<Container::size_type>::max()
是容器大小的上限。Container::max_size()
也是容器大小的上限,但它是一个更紧密的上限,因此更有用。无论如何,并不能保证实际上可以创建这么大的容器,我能想到的唯一用例是对输入值进行合理性检查。 - Yakov Galkabad_alloc
”。 - Yakov Galkacontainer<T>::max_size()
方法给出。一般情况下,这个大小可能会比container<T>::size_type
的范围小(也确实如此)。std::numeric_limits
获取container::size_type
的范围,但要记住,容器不能保证它们的最大大小能够达到其size_type
的完整范围。container<T>::max_size()
返回容器中最多的元素数量,而std::numeric_limits<container<T>::size_type>::max()
返回size_type
的范围。这些值是不可比较的。max_size()
的规范是我的参考。第三,您也可以在任何编译器中尝试一下max_size()
通常会做什么。对于std::vector<T>
,您通常会看到std::numeric_limits<std::vector<T>::size_type>::max() / sizeof(T)
。这不一定是可达到的,但思路是清晰的。 - AnT stands with Russiastd::numeric_limits<Container::size_type>::max()
”,但实际上最大尺寸可能会更小。 - 463035818_is_not_a_numbermax_size()
也不需要精确。例如,在GCC中,std::vector<T>::max_size()
返回std::numeric_limits<std::vector<T>::size_type>::max() / sizeof(T)
。但是,即使如此,也无法达到这个值,因为GCC拒绝分配大小为SIZE_MAX
的内存块。它只能分配最多SIZE_MAX / 2
,这意味着std::vector<T>
的实际最大大小比max_size()
报告的要小约两倍。 - AnT stands with Russia理论极限是size_t
可以包含的最大数量,通常用于返回容器中元素的数量。对于大多数32位平台,它是2^32,对于大多数64位平台,它是2^64,但实际上这是实现定义的,在标准中没有强制限制。
但实际上,任何容器的可能最大大小都要小得多,因为它受可用内存地址空间和可用空闲内存的限制。
bac_alloc
。 - yo'
std::size
的最大大小? - πάντα ῥεῖstd::map::max_size()
会返回一个保证不会超过的大小。然而,它通常甚至不会接近这个大小,并且该函数被认为不是很有用。 - Bo Persson