reserve,resize,memcpy方法
int main()
{
int _i[]={1,2,3,4,5,6,7,8,9,10}; //可以是其他结构大小固定的结构体
vector <int>_vec;
_vec.reserve(10); //预分配空间,有效利用内存资源
_vec.resize(10); //定义元素空间,落实容器
memcpy(&_vec[0],_i,10*sizeof(int)); //内存拷贝
for(vector::iterator _it=_vec.begin();_it!=_vec.end();_it++) //测试结果
cout<<*_it<<" ";
cout<<endl;
return 0;
}
编译运行,输出
1 2 3 4 5 6 7 8 9 10
//用reserve,assign方法
int main()
{
int _i[]={1,2,3,4,5,6,7,8,9,10}; //可以是其他结构大小固定的结构体
vector<int> _vec;
_vec.reserve(10); //预分配空间
_vec.assign(&_i[0],&_i[10]); //此方法应该比上一种速度要快些,因为直接拷贝赋值。
//但是要注意数组的end地址为end[10],而不是end[9],这个语句最重要,谨记。-jazzi
for(vector::iterator _it=_vec.begin();_it!=_vec.end();_it++) //测试结果
cout<<*_it<<" ";
cout<<endl;
return 0;
}
编译运行,输出
1 2 3 4 5 6 7 8 9 10
reserve()优势:
采用连续内存分配(提高内存利用率)。
如果插入一个新的元素,但是预留空间已经用完(size()==capacity()),此时会重新分配新的内存空间,将原空间的内容拷贝到新空间来,然后再插入新的元素,因此速度变慢。
resize()优势:
在容器没定义的前提下,此函数是必须的,为此容器开辟落实的空间。
因此stl容器中resize(), reserve()为两对对应接口,为创建vector类容器并保持高速随机访问。