C ++矢量库,重新分配,最大尺寸函数

时间:2012-02-28 02:23:52

标签: c++ arrays vector size max

对于作业,我应该重新创建C ++ Vector库,目前我仍然坚持如何返回最大大小。

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

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


目前我的函数基于数组的操作,而矢量库不是基于模板类,矢量库使用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???!?!?!?!?
}

}

2 个答案:

答案 0 :(得分:5)

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

作为另一个更现实的例子,如果您知道向量的最大大小(以字节为单位)被限制为4G,并且容器中包含的大小为每个实例128个字节,那么max_size将返回到33554431。 (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); 
}

答案 1 :(得分:1)

从这里给出您的链接:

  

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

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