获取向量的字节大小

Dav*_*log 9 c++ byte sizeof stdvector

对不起,这可能是简单而愚蠢的问题,但我无法在任何地方找到它.

我只是不知道如何获得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;
Run Code Online (Sandbox Code Playgroud)

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

Ada*_*nko 12

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

sizeof(std::vector<int>) + (sizeof(int) * MyVector.size())
Run Code Online (Sandbox Code Playgroud)

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

  • 说 `sizeof(MyVector)` + (sizeof(MyVector[0]) * MyVector.size())` 会不会更好,因为这会更健壮地防止 `MyVector` 变成一个 `std:: vector&lt;long int, customAllocator&lt;long int&gt;&gt;`? (3认同)

kfs*_*one 9

您可能不希望以字节为单位知道向量大小,因为向量是一个与内容分离的非平凡对象,内容位于动态内存中.

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

您可能想知道的是数据的大小,存储向量当前内容所需的字节数.要做到这一点,你可以使用

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

或者你可以这样做

size_t bytes = sizeof(vec[0]) * vec.size();
Run Code Online (Sandbox Code Playgroud)

  • `sizeof`在编译时进行评估.vec [0]计算vec.operator []的返回类型 (3认同)