include
include //vector容器要包含它的头文件·
using namespace std;
void print(vector& v)
{
for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
{
cout << *it << " ";
}
cout << endl;
}
//它是动态扩展,找一块新的更大的空间,把原来的数据拷贝到这,释放原来的空间
//1.赋值操作
/*
- 函数模型:、
- vector& operator=(const vector& dep) 重载=运算符
- assign(beg,end); 将beg,end之间的数据拷贝给自身
- assign(n,elem); 将n个elem拷贝赋值给本身
*/
/*
void test01()
{
vector<int>v;
vector<int>v1;
vector<int>v2;
for (int i = 0; i < 10; i++)
{
v.push_back(i);
}
print(v);
v1 = v;
//直接赋值法
print(v1);
v2.assign(v.begin(), v.end());
//assign 赋值
print(v2);
//n个元素方式赋值
vector<int>v3;
v3.assign(10, 100);//打印10个100
print(v3);
}
//2.容量和大小
/*
- 函数原型:
empty() 判断容器是否为空
capacity() 容器的容量
size() 返回容器中元素的个数
resize(int num) 重新指定容器的长度为num,
如果容器变长则以默认值填充新位置
如果容器变短,则末尾超过容器长度的元素删除
resize(int num,elem) 重新指定容器的长度为num,
如果容器变长则以elem值填充新位置
如果容器变短,则末尾超过容器长度的元素删除
*/
void test02()
{
vector<int>v1;
for (int i = 0; i < 10; i++)
{
v1.push_back(i);
}
print(v1);
if (!v1.empty() )
cout << "buweikong" << endl;
cout << "v1的容量大小:" << v1.capacity() << endl;
cout << "v1的大小:" << v1.size() << endl;
v1.resize(12,20);
print(v1);
}
//3.插入和删除操作
函数原型
push_back(elem); 尾部插入元素elem
pop_back();删除最后一个元素
insert(const_iterator pos,elem);迭代器指向位置pos插入元素elem
insert(const_iterator pos,int cout,elem);迭代器指向位置pos插入cout个元素elem
erase(const_iterator pos);删除迭代器指向的元素
erase(const_iterator start,const_iterator end);删除迭代器从start到end之间的元素
clear(); 删除容器中所有元素
//4.数据存取
函数原型:
at(int idx);返回索引idx所指的数据
operator[]返回索引idx所指的数据
front(); 返回容器中第一个数据元素
back(); 返回容器中最后一个数据元素
void test04()
{
vector<int>v4;
for (int i = 0; i < 1000; i++)
{
v4.push_back(i);
//利用at访问元素
//cout << v4.at(i) << endl;
//cout << v4[i] << endl;
}
int n=v4.back();
//print(v4);
cout <<"最后一个元素:" << n << endl;
n = v4.front();
cout <<"第一个元素:" << n << endl;
//5.互换容器
//函数模型:swap(vex)
vector<int>v5;
v5.swap(v4);
//print(v5);
//print(v4);//因为v5是空,所以交换之后不进入for循环,打印一个换行
//巧用swap()可以收缩内存空间
cout << "v4的容量是:" << v4.capacity() << endl;
cout << "v5的容量是:" << v5.capacity() << endl;
cout << "v5的大小是:" << v5.size() << endl;
v5.resize(3);//改变了大小,但是容量没有改变,所以浪费了
cout << "v5的容量是:" << v5.capacity() << endl;
cout << "v5的大小是:" << v5.size() << endl;
//巧用swap收缩
vector<int>(v5).swap(v5);
cout << "v5的容量是:" << v5.capacity() << endl;
cout << "v5的大小是:" << v5.size() << endl;
//vector<int>(v5)匿名对象 利用拷贝函数构造新的对象
//swap(v5); 容器的交换,相当于指针进行交换,交换完之后,匿名对象会自动销毁(销毁原来的1000)
}
//6.vector预留空间
void test06()
{
vector<int>v;
//预留空间
v.reserve(100000);
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;
}
int main()
{
//test01();
//test02();
//test04();
test06();
system("pause");
return 0;
}