标签:
我写一个简单的程序来区分vector容器size()和capacity()函数,这里capacity函数就是为vector容器预留了空间,不需要每次增添元素就要重新分配内存,这样效率上提高了很多,我通过一个间的小程序来研究,下面是程序和运行结果,比较简明可以看出capacity的大小都会比size大,因为size 指容器当前拥有的元素个数;而 capacity 则指容 器在必须分配新存储空间之前可以存储的元素总数。废话不多说,附上代码和运行结果:#include"stdafx.h" #include<iostream> #include<vector> using namespace std; int main() { vector<int>ivec; //当容器空的时候,输出他们各自的大小: cout<<"ivec.size():"<<ivec.size()<<endl; cout<<"ivec.capacity():"<<ivec.capacity()<<endl; for(vector<int>::size_type ix=0;ix!=11;++ix) ivec.push_back(ix); //当放里面放了11个数后,再观察他们的大小 cout<<"ivec.size():"<<ivec.size()<<endl; cout<<"ivec.capacity():"<<ivec.capacity()<<endl; //这里把capacity预留的空间都使用完 while(ivec.size()!=ivec.capacity()) ivec.push_back(0); //然后再往后添加一个元素 ivec.push_back(0); //此时观察他们的大小变化 cout<<"ivec.size():"<<ivec.size()<<endl; cout<<"ivec.capacity():"<<ivec.capacity()<<endl; ivec.reserve(100);//这里重新设定容器大小 cout<<"ivec.size():"<<ivec.size()<<endl; cout<<"ivec.capacity():"<<ivec.capacity()<<endl; while(ivec.size()!=ivec.capacity()) ivec.push_back(0); ivec.push_back(0); //最后可以发现,capacity的大小无论是vcetor开始大小还是重新定义大小,总是比size要大,这样预留空间,提高运行效率 cout<<"ivec.size():"<<ivec.size()<<endl; cout<<"ivec.capacity():"<<ivec.capacity()<<endl; system("pause"); return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
这里想经过一个小程序研究标准库为 vector 对象提供的内存分配策,因为vector容器比list和deque容器用的很多,而且它的存储方式是连续的
标签:
原文地址:http://blog.csdn.net/jy_he/article/details/47833447