在32位系统上。
std::vector<char>::max_size()
返回2 32 -1,大小char
- 1个字节std::vector<int>::max_size()
返回2 30 -1,大小int
- 4字节std::vector<double>::max_size()
返回2 29 -1,大小double
- 8字节任何人都可以告诉我max_size()
取决于什么?
如果它在64位系统上运行,那么max_size()
的返回值是什么。
答案 0 :(得分:19)
max_size()
是可以放在矢量中的理论最大项目数。在32位系统上,理论上可以分配4Gb == 2 ^ 32,即2 ^ 32 char
值,2 ^ 30 int
值或2 ^ 29 double
值。您的实现似乎正在使用该值,但减去1。
当然,你永远不可能真正分配一个大的矢量;在那之前很久你就会失去记忆。
除了不能分配大于该值的向量之外,没有要求max_size()
返回什么值。在64位系统上,它可能会为char
返回2 ^ 64-1,或者它可能返回一个较小的值,因为系统只有有限的内存空间。 64位PC通常仅限于48位地址空间。
答案 1 :(得分:7)
向量的最大可能大小 由于系统或库可能达到 实施限制。
所以我认为最大值是依赖于实现的。在我的机器上有以下代码
std::vector<int> v;
cout << v.max_size();
产生输出:
4611686018427387903 // built as 64-bit target
1073741823 // built as 32-bit target
所以公式2 ^(64-大小(类型)) - 1看起来也是正确的。
答案 2 :(得分:2)
通过
即可获得答案Vector<data-type>v;
Cout<< v.max_size();
或者我们可以通过以下方式获得答案
(2^bit of system)/sizeof(datatype) -1
Eg for 64 bit system
Iong long datatype has size =8 bit
Ans =(2^64)/8 -1
2305843009213693951