vector 内存分配

#include 
#include 

using namespace std;
int main()
 {
 vector 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(iVec).swap(iVec); //effective stl中的特殊交换,去除多余的空间。此处利用拷贝构造函数生成了一个临时的vector对象
 //cout << "临时的vector对象的大小为: "<<(vector(iVec)).size()<对象的容量为: "<<(vector(iVec)).capacity()<的对象时,只拷贝构造了原vector中有效的部
分,即vector.size()个,而capacity代表的大小并没有都拷贝构造,因为那里面根本就没有对象,只是vector的内存分配策
略预先分配了一个相对元素个数更大的容量,以防止频繁拷贝和释放的负担。这样,swap后vector的大小和容量相等便很好理解了
。*/
 cout << "交换后,当前vector 的大小为: " << iVec.size() << "交换后,当前vector 的容量为: " << iVec.capacity() << endl;
 return 0;
 }


你可能感兴趣的:(C/C++)