C++ 中 sizeof() 返回的向量大小

问题描述

我只是在尝试 C++,这是我执行的代码片段:

int main() {

    std::vector<int> data = { 1,2,3,4,5 };
    std::cout << data.size() << " " << sizeof(data) << " " << sizeof(data[0]) << std::endl;
    return 0;
}

我得到的输出是: 5 16 4 现在我知道 size() 返回向量中的元素数,即。 5 这里和 sizeof() 返回变量占用的字节数。 sizeof(data[0]) 为 4 个字节是有意义的,因为它是一个 int 并且 Visual Studio 编译器为它分配了 4 个字节,但我不明白为什么 sizeof(data) 返回 16。我正在计算 20。对此的任何解释都是很有帮助。

解决方法

std::vector<T> 使用动态存储,其大小可以更改,如文档中所述。与 std::array<T,size> 不同,它不是聚合类型,并且存储的数据不是类存储的一部分。 sizeof 返回存储的大小,这是一个在编译时确定的常数,根据 C++ 规则。

因此,您将苹果与橙子进行比较。 sizeof 以字节为单位返回向量类型的大小,成员函数 size() 返回创建的元素数。成员函数 capacity() 将返回分配的内存,该内存可以大于 size()*sizeof(T)