cout<<v.size()<<endl<<v.capacity()<<endl;//此时容器能够提供的空间是2,又增加元素,不够,需要申请空间,申请后的空间为原来2倍,就是4了,那么size()为3,capacity()为4 v.push_back(1); cout<<v.size()<<endl<<v.capacity()<<endl;//容器还能够提供一个空间,不需要申请新空间,size()为4,capac...
size是当前 vector 容器真实占用的大小,也就是容器当前拥有多少个容器。 capacity是指在发生 realloc 前能允许的最大元素数,即预分配的内存空间。 当然,这两个属性分别对应两个方法:resize()和reserve()。 使用resize()容器内的对象内存空间是真正存在的。 使用reserve()仅仅只是修改了 capacity 的值,容器内的对象...
#include <iostream>#include <vector>using std::vector;int main(void){vector<int> v;std::cout<<"v.size() == " << v.size() << " v.capacity() = " << v.capacity() << std::endl;v.reserve(10);std::cout<<"v.size() == " << v.size() << " v.capacity() = " << v...
5.resize()函数只改变容器的元素数目,未改变容器大小。 6.用reserve(size_type)只是扩大capacity值,这些内存空间可能还是“野”的,如果此时使用“[ ]”来访问,则可能会越界。而resize(size_type new_size)会真正使容器具有new_size个对象。 整体的一个扩容流程为:申请新的内存空间(空间大小为原空间的两倍或一点...
class _A> size_type vector::max_size( ) const; template<class _TYPE, class _A> void vector::resize( size_type _N, _TYPE _X = _TYPE( ) ); template<class _TYPE, class _A> size_type vector::capacity( ) const; template<class _TYPE, class _A> size_type vector::size( ) const...
capacity是当前vector分配的可以容纳的元素个数,下面的代码中,vec0可以容纳13个元素,但仅包含了size(即10)个元素,还有3个元素可以放进去,当再放入超过3个元素后,vec0就会被重新分配空间;所以,capacity始终大于等于size; resize把容器改为容纳n个元素。调用resize之后,size将会变为n;其中n又分了三种情况,当n <siz...
仍然用vs调试,观察内存布局 vector a的第一个字段是size 大小第二个字段是capacity 容量 和std::string差不多 当size>capacity也就是空间不够用时 首先配置一块新空间,然后将元素从旧空间一一搬往新空间,再把旧空间归还给操作系统 内存增长机制 测试代码: ...
仍然用vs调试,观察内存布局 vector a的第一个字段是size 大小第二个字段是capacity 容量 和std::string差不多 当size>capacity也就是空间不够用时 首先配置一块新空间,然后将元素从旧空间一一搬往新空间,再把旧空间归还给操作系统 内存增长机制 测试代码: ...
2.1size() 和capacity() 堆中分配内存,元素连续存放,内存空间只会增长不会减少。vector有两个函数,一个是capacity(),在不分配新内存下最多可以保存的元素个数,另一个size(),返回当前已经存储数据的个数。对于vector来说,capacity是永远大于等于size的,capacity和size相等时,vector就会扩容,capacity变大(翻倍)。
vector<int> v1;size_t sz = v1.capacity();cout << "初始容量:" << sz << endl;for (size_t i = 0; i < 100; i++){v1.push_back(i);if (sz != v1.capacity()){sz = v1.capacity();cout << "容量: " << sz << endl;}} ...