#include <iostream>
#include <vector>
using namespace std;
void printVector(vector <int> &v)
{
for(vector<int>::iterator it=v.begin();it!=v.end();it++)//迭代器的使用方法
//遍历的所有数据 是重点!!!!!!!
{
cout<<*it<<" ";
}
cout<<endl;
}
//初始化
void test01(){
vector <int> v1;//默认构造
int arr[]={10,20,30,40};
vector<int> v2(arr,arr+sizeof(arr)/sizeof(int));
vector<int> v3(v2.begin(),v2.end());
vector<int> v4(v3);
printVector(v2);
printVector(v3);
printVector(v4);
}
//常用赋值操作
void test02(){
int arr[]={10,20,30,40};
vector <int> v1(arr,arr+sizeof(arr)/sizeof(int));
//成员方法
vector <int> v2;
v2.assign(v1.begin(),v1.end());
//重载"="
vector <int> v3;
v3 = v2;
//
int arr1[]={100,200,300,400};
vector <int> v4(arr1,arr1+sizeof(arr1)/sizeof(int));
printVector(v1);
printVector(v2);
printVector(v3);
printVector(v4);
cout<<"-----------"<<endl;
v4.swap(v1);//交换原理:交换指向对应内存空间的指针
printVector(v1);
printVector(v2);
printVector(v3);
printVector(v4);
}
//大小操作
void test03(){
int arr[]={10,20,30,40};
vector<int>v1(arr,arr+sizeof(arr)/sizeof(int));
cout<<"size:"<<v1.size()<<endl;
if(v1.empty()){
cout<<"空"<<endl;
}
else{
for(vector<int>::iterator it=v1.begin();it!=v1.end();it++)
{
cout<<*it<<" ";
}cout<<endl;
}
v1.resize(2);
printVector(v1);
//v1.resize(6);
//printVector(v1);
v1.resize(6,1);
printVector(v1);
for(int i=0;i<1000;i++) v1.push_back(i);
cout<<"size:"<<v1.size()<<endl;//元素个数
cout<<"容量"<<v1.capacity()<<endl;//容量100
//vector 容器申请空间,会申请固定大小空间,后二倍形式申请
}
//存取数据
void test04(){
int arr[]={10,20,30,40};
vector<int>v1(arr,arr+sizeof(arr)/sizeof(int));
//重载[]方式
for(int i=0;i<v1.size();i++){
cout<<v1[i]<<" ";
}cout<<endl;
// at成员方法
for(int i=0;i<v1.size();i++){
cout<<v1.at(i)<<" ";
}cout<<endl;
//区别:at抛异常[]不抛异常
cout<<"front:"<<v1.front()<<endl;
cout<<"back:"<<v1.back()<<endl;
}
//插入和删除
void test05(){
vector<int>v;
v.push_back(10);
v.push_back(20);
//头插法
v.insert(v.begin(),30);
v.insert(v.end(),40);
v.insert(v.begin()+2,100);//vector支持随机访问
//支持数组下标,一般都支持随机访问
//迭代器可以直接+2 +3 -2 -5等操作
printVector(v);
//删除
v.erase(v.begin());
printVector(v);
v.erase(v.begin()+1,v.end());
printVector(v);
v.clear();
cout<<"size:"<<v.size()<<endl;
}
//巧用swap缩减空间
void test06(){
//vector添加元素 它会自动增长,但删除元素是不会自动减少
vector<int>v;
for(int i=0;i<100000;i++) v.push_back(i);
cout<<"size:"<<v.size()<<endl;
cout<<"容量"<<v.capacity()<<endl;
v.resize(10);
cout<<"-----------"<<endl;
cout<<"size:"<<v.size()<<endl;
cout<<"容量"<<v.capacity()<<endl;
//收缩空间
vector <int>(v).swap(v);
cout<<"-----------"<<endl;
cout<<"size:"<<v.size()<<endl;
cout<<"容量"<<v.capacity()<<endl;
}
void test07(){
//reserbe 预留空间 resize 区别
int num = 0;
int *address = NULL;
vector <int> v;
//v.reserve(100000);
for(int i=0;i<100000;i++) {
v.push_back(i);
if(address !=&(v[0]))
{
address = &(v[0]);
num++;
}
}cout<<"num:"<<num<<endl;
//如果你知道容器大概要存储的元素个数
//那么你可以用reserve 预留空间
}
int main()
{
// test01();
// test02();
// test03();
// test04();
// test05();
// test06();
test07();
}
免责声明:部分内容来自网络,若侵权联系作者删除