很抱歉这可能是一个简单而愚蠢的问题,但我无法在任何地方找到它。
我只是不知道如何获得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(矢量大小)乘以项目数?
答案 0 :(得分:9)
您可能不想以字节为单位知道矢量的大小,因为该矢量是一个与内容分离的非平凡对象,内容位于动态内存中
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();
答案 1 :(得分:8)
Vector将其元素存储在内部分配的内存数组中。你可以这样做:
sizeof(std::vector<int>) + (sizeof(int) * MyVector.size())
这将为您提供向量结构本身的大小加上其中所有int的大小,但它可能不包括内存分配器可能施加的任何小开销。我不确定是否有一种独立于平台的方式来包含它。
答案 2 :(得分:2)
向量的大小分为两个主要部分,容器实现本身的大小,以及存储在其中的所有元素的大小。
要获得容器实现的大小,您可以执行当前的操作:
sizeof(std::vector<int>);
要获得存储在其中的所有元素的大小,您可以执行以下操作:
MyVector.size() * sizeof(int)
然后将它们加在一起以获得总大小。