c++ stl库--vector

头文件为#include<vector>

vector向量容器不仅可以像数组一样进行随机访问,还可以在尾部插入元素,还可以与map,pair等混合使用;是一种简单高效的容器vector是表示可变大小数组的序列容器。既然是不定长数组所以可以用cin或者scanf直接输入。

1.创建vector对象;

(1)不指定容器的元素个数;

如定义一个来存储整形的容器;

vector<int> v;  

(2)创建时指定容器大小;

如定义一个来存储10个double类型元素的容器;

vector<double> v(10);  

(3)创建一个具有n个元素的向量容器对象,每个元素具有指定的初始值;

如定一个具有10个string元素的容器,每个元素的值都为hello;

vector<string> v(10,"hello");  

(4)~vector<elemtype>();销毁数据释放资源;

2.尾部元素扩张;

函数为push_back();意思为在vector容器最后添加一个新元素;

 

#include<bits/stdc++.h>//万能头文件包含所有头文件   
using namespace std;  
int main()  
{  
    vector<int> v;  
    v.push_back(1);//在尾部插入一个1,现在容器为空,尾部也就是头部  
    v.push_back(666);//在尾部再插入一个666现在容器有两个元素1,666   
    v.push_back(888);//同上  
    cout<<v[0]<<" "<<v[1]<<" "<<v[2]<<endl;//采取下标方式访问容器中元素,跟数组相同   
    return 0;  
}  

3.容器元素访问;

 

(1)采取下标法访问;这中访问方式如同数组;坐标从0开始;

(2)采取迭代器访问;

#include<bits/stdc++.h>//万能头文件包含所有头文件   
using namespace std;  
int main()  
{  
    vector<int> v(3);  
    v[0]=0;v[1]=1;v[2]=2;  
    cout<<"下标法:"<<endl;  
    cout<<v[0]<<" "<<v[1]<<" "<<v[2]<<endl;  
      
    cout<<"迭代器法:"<<endl;  
    vector<int>::iterator it;//定义迭代器变量   
    for(it=v.begin();it!=v.end();it++)//it如同平常用的循环变量i   
    {  
        cout<<*it<<" ";  
    }  
    cout<<endl;   
    return 0;  
}  

4.元素的插入

插入函数为insert();要求插入位置,是元素的迭代器位置;

#include<bits/stdc++.h>//万能头文件包含所有头文件   
using namespace std;  
int main()  
{  
    vector<int> v(3);  
    v[0]=0;v[1]=5;v[2]=10;  
    v.insert(v.begin(),-1);//在最前面插入元素,元素值为-1  
    v.insert(v.end(),15);//在最后面插入元素,元素值为15  
    v.insert(v.begin()+2,2);//在开始第二个元素后面的位置插入元素,元素值为2  
    vector<int>::iterator it;  
    for(it=v.begin();it!=v.end();it++)  
    {  
        cout<<*it<<" ";  
    }cout<<endl;  
    return 0;  
}  

5.元素的删除

 

删除函数为erase();删除某个元素或者某个区间的元素;

pop_back()删除最后一个位置的元素;

还有个clear()一次性删除所有元素,既清空容器;

#include<bits/stdc++.h>//万能头文件包含所有头文件   
using namespace std;  
int main()  
{  
    vector<int> v(10);  
    for(int i=0;i<10;i++)//给容器中10个元素赋值为0-9   
    {  
        v[i]=i;  
    }  
    v.erase(v.begin());//删除第一个元素  
    v.pop_back();//删除最后一个元素 因为 v.end()返回指向容器最后一个数据单元的指针+1   
    vector<int>::iterator it;  
    for(it=v.begin();it!=v.end();it++)  
    {  
        cout<<*it<<" ";  
    }cout<<endl;  
      
    v.erase(v.begin()+2,v.begin()+4);//删除第三个到第五个元素  
    for(it=v.begin();it!=v.end();it++)  
    {  
        cout<<*it<<" ";  
    }cout<<endl;  
    return 0;  
}  

6.容器的容量大小;

 

函数为size();还有个empty()用来判断容器是否为空;

 

#include<bits/stdc++.h>//万能头文件包含所有头文件   
using namespace std;  
int main()  
{  
    vector<int> v(10);  
    for(int i=0;i<10;i++)//给容器中10个元素赋值为0-9   
    {  
        v[i]=i;  
    }  
    cout<<v.size()<<endl;//输出容器大小   
    cout<<v.empty()<<endl;//判断容器是否为空,空返回1,不为空返回0;   
    v.clear();//清空容器   
    cout<<v.empty()<<endl;  
    return 0;  
}  

 

7.容器中值的取用;

 

at(index)函数;返回制定index位置的值;

front()返回第一个值;

back()返回最后一个值;

8.容器常用函数小结;

vector<elemtype>v;

v.at(index);         返回指定index位置处的元素
v.front();           返回容器最开始的元素
v.back();           返回容器最后一个元素

v.begin();           返回指向容器最开始位置数据的指针
v.end();             返回指向容器最后一个数据单元+1的指针


v.push_back(elem); 在容器最后位置添加一个元素elem
v.insert(v.begin() + p,elem);   在指针p指向的位置插入数据elem,返回指向elem位置的指针       
v.insert(v.begin() + p,n,elem); 在位置p插入n个elem数据,无返回值
v.insert(v.begin() + p,begin,end) 在位置p插入在区间[begin,end)的数据,无返回值


v.pop_back();       删除容器最后位置处的元素
v.erase(v.begin() + p);         删除指针p指向位置的数据,返回下指向下一个数据位置的指针(迭代器)
v.erase(v.begin() + a,v.begin() + b); 删除begin,end区间的数据,返回指向下一个数据位置的指针(迭代器)
v.clear();           清除所有数据
v.empty();           判断容器是否为空,若为空返回true,否则返回false


v.size();           返回当前容器中实际存放元素的个数
v.resize();         重新设置vector的容量

resize(n) 

调整容器的长度大小,使其能容纳n个元素。

如果n小于容器的当前的size,则删除多出来的元素。

否则,添加采用值初始化的元素。

resize(n,t)

多一个参数t,将所有新添加的元素初始化为t。


v1.swap(v2);         交换两个容器中的数据

9.容器与其他STL工具嵌套使用时的注意;

在对容器排序时传的应该是迭代器位置如sort(v.begin(),v.end());

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值