如果vector在类中,为什么std :: vector上的sizeof()输出与std :: vector的sizeof()不同?

时间:2018-02-08 11:35:20

标签: c++11 vector stl sizeof

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()的输出是不同的。请解释此代码的输出。

2 个答案:

答案 0 :(得分:2)

由于拼写错误,请尝试以下方法:

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

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

答案 1 :(得分:0)

两种情况下的大小均为24。在输出中只有&#34; 1&#34; &#34;尺寸1&#34;没有空间的前提。

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

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