我有一个班苹果
class apples
{
private:
double x;
double y;
double z;
public:
//some methods
};
我想将指向 apples 对象的指针存储在向量中。 我这样做是为了在任何文件中创建任何对象。使用任何文件中的任何对象。 我使用以下代码来确定我可以存储在该向量中的指针的最大数量
int _tmain(int argc, _TCHAR* argv[])
{
vector<apples *> myvector;
cout<<"max :"<<myvector.max_size();
return 0;
}
它给了我:
1073741823
现在,我的问题是,我真的可以在该向量中存储1073741823没有指针,或者这是向量的内存限制(即1073741823字节)吗?
所以如果有2个载体
vector<int> A
&
vector<double> B
可以有一个1073741823元素&amp; B还有1073741823元素? 我要求澄清一下, 向量可以存储的元素的最大数量不依赖于存储的实体类型(int或double)? (这与矢量的当前容量无关!) 此外,指向苹果对象的指针的大小(不询问苹果对象的大小!)? 谢谢。
答案 0 :(得分:7)
这是用于在向量中存储元素的库限制。
返回向量容器可以使用的最大元素数 持。
这不是当前分配给的存储空间量 vector(这可以用成员vector :: capacity获得),但是 由于系统或库,矢量可以达到的最大可能大小 实施限制。
所以,你不能存储超过它(,并且由于系统限制,实际上可能会少于它)
换句话说,即使您拥有最佳资源(内存,CPU,...)能力且您的元素具有最小尺寸,您也不能存储超过max_size()
根据头文件中对max_size()
的评论:返回最大可能%向量的大小。
答案 1 :(得分:4)
max_size
返回向量可以容纳的元素数量的上限。这并不意味着v.resize(v.max_size())
会成功。这仅仅意味着v.resize(v.max_size() + 1)
会失败。
答案 2 :(得分:2)
此外,指向苹果对象的指针的大小(不询问苹果对象的大小!)?
我确信某位语言律师会指出这是不正确的,但在实践中:32位构建将使用32位指针,因此指向对象的指针是4个字节。在64位版本中,每个指针可以获得8个字节。
答案 3 :(得分:2)
的大小,如果不受任何资源限制(CPU,内存,时间) 的约束,向量将无法再添加项目本身。
由于主要是内存限制,实际存储的数量通常会大幅降低。
通过调用vector::capacity()
可以找到当前容量,如果您想知道在当前设置上拉伸矢量的距离,请继续调整矢量大小,直到bad_alloc
为止。抛出异常)
答案 4 :(得分:1)
我真的可以在该向量中存储1073741823指针,或者这是向量的内存容量吗?
max_size()
告诉您vector
的此实现无法处理大于此值的大小;可以使用,如果有足够的内存可以包含它们。
向量中存储的实体的最大数量是否取决于实体的类型?如果是,如何计算?
这取决于vector
和它使用的分配器的实现。在实践中它通常会;你可能会发现它等于像numeric_limits<size_t>::max() / sizeof (value_type)
这样的东西;可以在数组中分配的最大字节数除以对象大小。
此外,指向苹果对象的指针的大小(不询问苹果对象的大小!)?
这取决于您的平台。由于max_size()
非常小,我猜你使用的是32位平台,在这种情况下,指针将是32位(4字节)。其他平台将具有不同的指针大小。
答案 5 :(得分:0)
hex(1073741823)='0x3fffffff'
所以看起来像是一些预定义的限制。