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的大小,但它可能不包括内存分配器可能施加的任何小开销.我不确定是否有一种独立于平台的方式来包含它.
您可能不希望以字节为单位知道向量的大小,因为向量是一个与内容分离的非平凡对象,内容位于动态内存中.
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)