【问题标题】:Why is the sizeof() output over the std::vector is different than the sizeof() of std::vector if vector is inside the class?如果向量在类内,为什么 std::vector 上的 sizeof() 输出与 std::vector 的 sizeof() 不同?
【发布时间】:2018-02-08 11:35:19
【问题描述】:
class c1 {
public:
std::vector<int> vc;
};

int main(int argc, char** argv) {

std::vector<int> v2;
std::cout << "Size 1" << sizeof (v2) << '\n';

v2.push_back(23);
std::cout << "Size 2" << sizeof (v2) << '\n';

c1 obj;
std::cout<<"\n Size of class is :"<<sizeof(obj);
std::cout<<"\n Size of class vector is :"<<sizeof(obj.vc);

obj.vc.push_back(25);
obj.vc.push_back(25);
obj.vc.push_back(25);
obj.vc.push_back(25);
obj.vc.push_back(25);
obj.vc.push_back(25);
obj.vc.push_back(25);
obj.vc.push_back(25);
std::cout<<"\n Size of class is :"<<sizeof(obj);
std::cout<<"\n Size of class vector is :"<<sizeof(obj.vc);

return 0;
}

代码输出:

Size 124
Size 224

 Size of class is :24
 Size of class vector is :24
 Size of class is :24
 Size of class vector is :24

在上面的代码中,为什么sizeof()对向量的输出和向量在类内时sizeof()对向量的输出是不同的。请解释这段代码的输出。

【问题讨论】:

  • “Size 1”和“24”、“Size 2”和“24”之间没有空格

标签: c++11 vector stl sizeof


【解决方案1】:

由于打字错误,试试这个:

std::vector<int> v2;
std::cout << "Size 1 =" << sizeof (v2) << '\n';

v2.push_back(23);
std::cout << "Size 2 =" << sizeof (v2) << '\n';

【讨论】:

    【解决方案2】:

    这两种情况的大小都是 24。在输出中,前面只有“Size 1”的“1”,没有空格。

    std::vector 中添加元素不会改变对象的大小:实际元素被放入由std::vector 管理的动态分配的内存中。 std::vector 本身仅包含指向其内存的指针等。 C++ 对象在创建后永远不能改变大小。

    要获取向量中的元素个数,请使用obj.vc.size()

    【讨论】:

    • 我错过了,想知道为什么输出这么奇怪。
    • 出乎意料的是,我错过了,我想知道为什么输出如此奇怪。非常感谢
    猜你喜欢
    • 1970-01-01
    • 2018-10-23
    • 1970-01-01
    • 1970-01-01
    • 2020-09-22
    • 2017-05-22
    • 2020-02-01
    相关资源
    最近更新 更多