如何预测向量的大小?
#include <vector>
#include <iostream>
using namespace std;
int main() {
cout << sizeof(vector<char[8]>) << endl;
cout << sizeof(vector<char[16]>) << endl;
return 0;
}
[starlon@localhost LCDControl]$ ./test
12
12
由于vector<>
它本身是一个自己做动态内存管理的类,所以使用sizeof
操作符来询问它的大小并不是很有意义。我怀疑你会发现你上面计算的值总是 12。
您可以使用该方法询问向量包含多少元素.size()
。此外,该方法将告诉您它实际.capacity()
为多少元素分配了内存(即使它们尚未全部使用)。
请记住,这是在编译sizeof
时评估的,因此它无法知道稍后在运行时将多少元素插入到容器中。
sizeof 总是返回第一级对象/类型的大小。它不会尝试测量对象在其他位置指向的内存量。sizeof 返回的 12 个字节反映了 vector 数据成员的大小。其中一个成员是指向实际数据的指针。
有一个叫做 size() 的方法,
它告诉你里面包含了多少元素。
但是对象的大小不会反映这一点,因为它只包含一个指向实际数据的指针。
顺便说一句,您正在声明 char 数组的向量。这是你真正想要的吗?
还有这个:
std::cout << std::vector<X>(Y) << "\n";
无论 X 或 Y 是什么,都应该(可能)总是返回相同的值。
你到底想做什么,你想知道std::vector
包含 8 或 16 char
s 的 a 占用了多少内存吗?
如果这就是你想要的,那么你上面的代码是错误的。上面的代码显示的是 a 的大小std::vector
,其中元素是 s 的数组char
。它为您提供std::vector
对象本身的大小 - 但没有说明元素占用的内存量。该内存是由vector
.
使用运算符不可能知道这一点sizeof
,因为sizeof
它是一个编译时运算符,而元素的内存是在运行时动态分配的。
其他回复解释了为什么您不能在尝试时直接使用 sizeof。但是,您可以使用 sizeof 通过以下方式获取您要查找的内容:
vector<int> my_vector;
// Push some stuff here
// ...
cout << my_vector.size() * sizeof(int) << endl;
my_vector.size() 将返回元素的大小。然后使用 sizeof(element) 来获取数组中每个元素的大小(以字节为单位)。他们的产品是您正在寻找的答案。