【问题标题】:C++ Vector library, Recreating for Assignment, max size functionC++ 向量库,重新创建分配,最大尺寸函数
【发布时间】:2012-03-17 13:06:10
【问题描述】:

对于一个作业,我应该重新创建 C++ Vector 库,但我目前被困在如何返回最大尺寸上。

根据本网站:http://www.cplusplus.com/reference/stl/vector/ size_type max_size () 常量; 返回最大尺寸

返回向量容器可以容纳的最大元素数。


目前我的函数基于数组的操作,向量库不是基于模板类,向量库使用 int 和 size_t 数据类型。 (我不确定这是否与它有任何关系)

相关代码:

class vector{
private:
int *vect;
size_t length;
size_t cap;

public:
//=====================Constructor================
vector(){
    length = 0;
    cap = 20;
    vect = new int[20];
}

//INCOMPLETE
size_t max_size() const{
    //return???!?!?!?!?
}

}

【问题讨论】:

  • 你有什么问题?您必须跟踪数组中的元素数量。我假设是length
  • 不,根据 c++ 参考网站它指出:这不是当前分配给向量的存储空间量(这可以通过成员 vector::capacity 获得),而是最大潜在大小由于系统或库实现限制,向量可能会到达。
  • @ScottCurtis 哎呀误读了它是哪个函数 - 是的 max_size() 往往是本机 int 的最大值,但没有标准大小。
  • C++ vector max_size();的可能重复
  • 我可能在吹毛求疵,但您可以选择在声明 STL 向量时使用的分配器,而 max_size() 似乎由分配器定义。所以从技术上讲,你可以拥有一个 STL 向量,它具有你想要的任何 max_size 值,只需要提供你的自定义分配器。无论如何,新学生可以放心地忽略这一点。

标签: c++ arrays vector size max


【解决方案1】:

从这里给出的链接:

但由于系统或库实现限制,向量可能达到的最大潜在大小

在您的情况下,max_size 是系统上整数数组的最大大小。

【讨论】:

  • 这个怎么测量和返回,最大大小不取决于系统的物理内存和数据类型
  • 一个限制是 std::size_t 的最大值。数组的部分总是可以被调出的。另外,请看这里:stackoverflow.com/questions/216259/…
【解决方案2】:

由于您的库/代码或系统的限制,这与最大大小有关。对于一个非常人为的示例,假设您的实现使用无符号短(2 字节)数字来存储向量中的记录数。然后,您的 max_size 函数将返回 65,536,因为您的库会由于 实现而受到此限制。

作为另一个更现实的例子,如果您知道向量的最大大小(以字节为单位)被限制为 4G,并且容器中包含的大小是每个实例 128 字节,那么 max_size 将返回一些内容33,554,431。 (0xFFFFFFFF / 128)

以下是我在 C++ 的实现中是如何做到这一点的。本质上,找到 size_type 的最大值(无符号为 -1),然后将其除以存储在向量中的对象的大小。 (值类型) 在 32 位硬件上,size_type(-1) 将产生 4,294,967,295,如果您存储 unsigned int,则您的值 sizeof(value_type) 将产生 4 个字节,从而为您提供 max_size() 返回值 1,073,741,823。

/**  Returns the size() of the largest possible %vector.  */
size_type max_size() const
{ 
    return size_type(-1) / sizeof(value_type); 
}

【讨论】:

  • 有什么方法可以在不知道系统硬件限制的情况下使用模板 类确定不同系统的最大大小,我想那里,但作为一个新的 c++ 学生,我真的不确定是否/这怎么可能
猜你喜欢
  • 2012-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 2011-02-20
  • 1970-01-01
  • 2016-05-22
相关资源
最近更新 更多