vector 内存分配

#include <iostream>
#include <vector>

using namespace std;
int main()
 {
 vector<int> iVec;
 cout << "容器 大小为: " << iVec.size() << "容器 容量为: " << iVec.capacity() << endl; //1个元素, 容器容量为1

 iVec.push_back(1);
 cout << "容器 大小为: " << iVec.size() <<  "容器 容量为: " << iVec.capacity() << endl; //2个元素, 容器容量为2

 iVec.push_back(2);
 cout << "容器 大小为: " << iVec.size() <<  "容器 容量为: " << iVec.capacity() << endl; //3个元素, 容器容量为4

 iVec.push_back(3);
 cout << "容器 大小为: " << iVec.size() << "容器 容量为: " << iVec.capacity() << endl; //4个元素, 容器容量为4

 iVec.push_back(4);
 iVec.push_back(5);
 cout << "容器 大小为: " << iVec.size() << "容器 容量为: " << iVec.capacity() << endl; //5个元素, 容器容量为8

 iVec.push_back(6);
 cout << "容器 大小为: " << iVec.size() <<  "容器 容量为: " << iVec.capacity() << endl; //6个元素, 容器容量为8

 iVec.push_back(7);
 cout << "容器 大小为: " << iVec.size() << "容器 容量为: " << iVec.capacity() << endl; //7个元素, 容器容量为8

 iVec.push_back(8);
 cout << "容器 大小为: " << iVec.size() << "容器 容量为: " << iVec.capacity() << endl; //8个元素, 容器容量为8

 iVec.push_back(9);
 cout << "容器 大小为: " << iVec.size()  << "容器 容量为: " << iVec.capacity() << endl; //9个元素, 容器容量为16
 /* 结论:
 对于vc6集成的stl实现,vector背后的内存分配是按照2的倍数分配内存的。当当前容量对插入元素不够时,
 分配一块新的内存,这块内存的容量是原vector容量的2倍大小,然后复制旧内存,释放旧内存,可能多次
 涉及拷贝构造函数和析构函数,而这也正是vector的劣势所在。
 */
/* 测试effective stl中的特殊的交换 swap() */
 cout << "当前vector 的大小为: " << iVec.size() << "当前vector 的容量为: " << iVec.capacity() << endl;
 vector<int>(iVec).swap(iVec); //effective stl中的特殊交换,去除多余的空间。此处利用拷贝构造函数生成了一个临时的vector<int>对象
 //cout << "临时的vector<int>对象的大小为: "<<(vector<int>(iVec)).size()<<endl;
 //cout << "临时的vector<int>对象的容量为: "<<(vector<int>(iVec)).capacity()<<endl;
 /* 说明什么呢? 说明拷贝构造函数临时生成vector<int>的对象时,只拷贝构造了原vector中有效的部
分,即vector<int>.size()个,而capacity代表的大小并没有都拷贝构造,因为那里面根本就没有对象,只是vector的内存分配策
略预先分配了一个相对元素个数更大的容量,以防止频繁拷贝和释放的负担。这样,swap后vector的大小和容量相等便很好理解了
。*/
 cout << "交换后,当前vector 的大小为: " << iVec.size() << "交换后,当前vector 的容量为: " << iVec.capacity() << endl;
 return 0;
 }


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值