如果向量在 class 内,为什么 std::vector 上的 sizeof() 输出与 std::vector 的 sizeof() 不同?
Why is the sizeof() output over the std::vector is different than the sizeof() of std::vector if vector is inside the class?
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() 输出和向量在 class 内部时向量上的 sizeof() 输出不同。请解释这段代码的输出。
由于打字错误,试试这个:
std::vector<int> v2;
std::cout << "Size 1 =" << sizeof (v2) << '\n';
v2.push_back(23);
std::cout << "Size 2 =" << sizeof (v2) << '\n';
两种情况下的大小都是 24。在输出中只有 "Size 1" 的“1”在前面,没有 space.
将元素添加到 std::vector
中不会改变对象的大小:实际元素被放入由 std::vector
管理的动态分配的内存中。 std::vector
本身仅包含指向其内存的指针等。 C++ 对象在创建后永远不能改变大小。
要获取向量中元素的数量,请使用 obj.vc.size()
。
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() 输出和向量在 class 内部时向量上的 sizeof() 输出不同。请解释这段代码的输出。
由于打字错误,试试这个:
std::vector<int> v2;
std::cout << "Size 1 =" << sizeof (v2) << '\n';
v2.push_back(23);
std::cout << "Size 2 =" << sizeof (v2) << '\n';
两种情况下的大小都是 24。在输出中只有 "Size 1" 的“1”在前面,没有 space.
将元素添加到 std::vector
中不会改变对象的大小:实际元素被放入由 std::vector
管理的动态分配的内存中。 std::vector
本身仅包含指向其内存的指针等。 C++ 对象在创建后永远不能改变大小。
要获取向量中元素的数量,请使用 obj.vc.size()
。