15

抱歉,这个问题可能简单而愚蠢,但我在任何地方都找不到。

我只是不知道如何获取 std::vector 的字节大小。

std::vector<int>MyVector;   
/* This will print 24 on my system*/   
std::cout << "Size of  my vector:\t" << sizeof(MyVector) << std::endl;

for(int i = 0; i < 1000; i++)
   MyVector.push_back(i);

/* This will still print 24...*/    
std::cout << "Size of  my vector:\t" << sizeof(MyVector) << std::endl;

那么如何获得向量的大小?!也许通过将 24(向量大小)乘以项目数?

4

3 回答 3

21

Vector 将其元素存储在内部分配的内存数组中。你可以这样做:

sizeof(std::vector<int>) + (sizeof(int) * MyVector.size())

这将为您提供向量结构本身的大小加上其中所有整数的大小,但它可能不包括您的内存分配器可能施加的任何小开销。我不确定是否有一种独立于平台的方式来包含它。

于 2013-06-22T19:21:15.523 回答
14

您可能不想知道向量的大小(以字节为单位),因为向量是一个独立于内容的重要对象,内容位于动态内存中。

std::vector<int> v { 1, 2, 3 };  // v on the stack, v.data() in the heap

您可能想知道的是数据的大小,即存储向量当前内容所需的字节数。为此,您可以使用

template<typename T>
size_t vectorsizeof(const typename std::vector<T>& vec)
{
    return sizeof(T) * vec.size();
}

或者你可以做

size_t bytes = sizeof(vec[0]) * vec.size();
于 2013-06-22T19:27:34.097 回答
2

向量的大小分为两个主要部分,容器实现本身的大小,以及存储在其中的所有元素的大小。

要获取容器实现的大小,您可以执行当前操作:

sizeof(std::vector<int>);

要获取其中存储的所有元素的大小,您可以执行以下操作:

MyVector.size() * sizeof(int)

然后只需将它们加在一起即可获得总大小。

于 2013-06-22T19:20:50.823 回答