2

如何预测向量的大小?

#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
4

5 回答 5

12

由于vector<>它本身是一个自己做动态内存管理的类,所以使用sizeof操作符来询问它的大小并不是很有意义。我怀疑你会发现你上面计算的值总是 12。

您可以使用该方法询问向量包含多少元素.size()。此外,该方法将告诉您它实际.capacity()为多少元素分配了内存(即使它们尚未全部使用)。

请记住,这是在编译sizeof时评估的,因此它无法知道稍后在运行时将多少元素插入到容器中。

于 2009-10-12T19:02:03.263 回答
3

sizeof 总是返回第一级对象/类型的大小。它不会尝试测量对象在其他位置指向的内存量。sizeof 返回的 12 个字节反映了 vector 数据成员的大小。其中一个成员是指向实际数据的指针。

于 2009-10-12T19:05:02.523 回答
1

有一个叫做 size() 的方法,
它告诉你里面包含了多少元素。
但是对象的大小不会反映这一点,因为它只包含一个指向实际数据的指针。

顺便说一句,您正在声明 char 数组的向量。这是你真正想要的吗?

还有这个:

std::cout << std::vector<X>(Y) << "\n";

无论 X 或 Y 是什么,都应该(可能)总是返回相同的值。

于 2009-10-12T19:01:10.113 回答
0

你到底想做什么,你想知道std::vector包含 8 或 16 chars 的 a 占用了多少内存吗?

如果这就是你想要的,那么你上面的代码是错误的。上面的代码显示的是 a 的大小std::vector,其中元素是 s 的数组char。它为您提供std::vector对象本身的大小 - 但没有说明元素占用的内存量。该内存是由vector.

使用运算符不可能知道这一点sizeof,因为sizeof它是一个编译时运算符,而元素的内存是在运行时动态分配的。

于 2009-10-12T19:02:52.997 回答
0

其他回复解释了为什么您不能在尝试时直接使用 sizeof。但是,您可以使用 sizeof 通过以下方式获取您要查找的内容:

vector<int> my_vector;

// Push some stuff here
// ...

cout << my_vector.size() * sizeof(int) << endl;

my_vector.size() 将返回元素的大小。然后使用 sizeof(element) 来获取数组中每个元素的大小(以字节为单位)。他们的产品是您正在寻找的答案。

于 2013-07-04T12:31:59.717 回答