#include<iostream>
#include<stdlib.h>
#include<string>
#include<vector>
using namespace std;
/*
3.2.7 vector互换空间
实现两个容器内元素进行互换
swap(vec); // 将vec与本身的元素互换
swap可以使两个容器互换,可以达到实用的收缩内存效果
3.2.8 vector预留空间
减少vector在动态扩展容量时的扩展次数
reserve(int len); //容器预留len个元素长度,预留位置不初始化,元素不可访问
如果数据量较大,可以一开始利用reserve预留空间
*/
void pv(vector<int> & v)
{
for(vector<int>::iterator it=v.begin(); it!=v.end(); it++)
{
cout << *it << " ";
}
cout << endl;
}
void test327()
{
vector<int> v1;
for(int i=0; i<10; i++)
{
v1.push_back(i);
}
pv(v1);
vector<int> v2;
for(int i=10; i>0; i--)
{
v2.push_back(i);
}
pv(v2);
v1.swap(v2);
pv(v1);
pv(v2);
}
void test327_1()
{
vector<int> v;
for(int i=0; i<100000; i++)
{
v.push_back(i);
}
cout << "v容量:" << v.capacity() << endl;
cout << "v大小:" << v.size() << endl;
v.resize(3);
cout << "v容量:" << v.capacity() << endl;
cout << "v大小:" << v.size() << endl; //浪费空间
//收缩内存用法
vector<int> (v).swap(v); //vector<int> (v) 匿名对象;.swap(v) 容器交换
cout << "v容量:" << v.capacity() << endl;
cout << "v大小:" << v.size() << endl;
}
void test328()
{
/*
vector<int> v;
int num = 0; //统计开辟空间的次数
int * p = NULL;
for(int i=0; i<100000; i++)
{
v.push_back(i);
if(p != &v[0])
{
p = &v[0];
num++;
}
}
cout << num << endl; //18
*/
vector<int> v;
v.reserve(100000); //利用reserve预留空间
int num = 0; //统计开辟空间的次数
int * p = NULL;
for(int i=0; i<100000; i++)
{
v.push_back(i);
if(p != &v[0])
{
p = &v[0];
num++;
}
}
cout << num << endl; //1
}
int main()
{
test327();
test327_1();
test328();
system("pause");
return 0;
}
