例如,float是4个字节。这是否意味着包含10个浮点数的向量恰好是40个字节?
答案 0 :(得分:0)
可以用不同的方式解释向量的“大小”:
vector::size()
提供当前存储的元素的数字
矢量,无论它们分配的内存如何。所以
在您的情况下,myVector.size()
将是10
vector:capacity()
为您提供到目前为止向量已分配内存的元素数。注意,当连续附加元素时,向量以“块”分配存储器,即它可以一次为50个新元素保留空间以避免重复的存储器分配。所以capacity() >= size()
总是如此。
sizeof(myVector)
会为您提供管理动态增加的一系列元素所需的数据结构vector
的大小。它通常包含动态分配的内存,sizeof
不反映这种情况,因此sizeof
在大多数情况下使用较少。
请参阅以下代码:
int main() {
vector<float> fv;
for (int i=0; i<10; i++) {
fv.push_back(1.0);
}
cout << "size(): " << fv.size() << endl;
cout << "capacity(): " << fv.capacity() << endl;
cout << "sizeof(fv): " << sizeof(fv) << endl;
return 0;
}
输出:
size(): 10
capacity(): 16
sizeof(fv): 24
希望它有所帮助。
答案 1 :(得分:0)
std::vector
有3种不同的尺寸。有矢量对象本身的大小,你可以用size(std::vector<some_type>)
得到它。但这个尺寸对任何东西都没有用。通常这将是三个指针的大小,因为这通常是矢量的实现方式。
第二个大小是size()
成员函数返回的大小。从此返回的值是向量中的元素数。这是大多数人在谈论矢量大小时使用的“大小”。
向量的最后一个大小是它当前分配的元素总数。这是通过使用capacity
成员函数获得的。
因此,一个包含10个浮点数的向量需要使用至少10个浮点值的内存,但它可能会使用更多,因为capacity()
被允许比其size()
更重要。但是矢量对象本身的大小(sizeof(name_of_vector)
)将是一些值,无论你添加到向量中的元素有多少,该值都不会改变。