vector向量容器

vector向量容器

vector向量容器不但能够像数组一样对元素进行随机访问,还能再尾部插入元素是一种简单、高效的容器。

包含头文件

#include<vector>

使用

STL泛型都定义再std命名空间中

迭代器相关

  • 创建iterator迭代器

    vector<int>::iterator it;
    
  • 获得迭代器当前位置上的值

    *it;
    

两个重要方法

  • begin()

    返回首元素位置的迭代器

  • end()

    返回最后一个元素的下一个元素位置的迭代器

    #include<iostream>
    #include<vector>
    using namespace std;
    
    int main(){
    	vector<int> v(10);
    	for(int i=0;i<10;i++){
    		v[i]=i;
    	}
    	vector<int>::iterator it;
        //获取第0个元素的值
    	it=v.begin();
    	cout<<*it<<endl;
    	it=v.end()-1;
        //获取最后一个元素的值
    	cout<<*it<<endl;
    	
    	return 0;
    } 
    
    //输出结果
    //0
    //9
    

创建vector对象

  • 不指定容器元素个数

    例如一个整型容器

    vector<int> v;
    
  • 创建时指定容器的大小

    vector<double> v(10);
    

    每个元素的值被初始化为0.0

  • 创建具有n个元素的容器对象,每个元素都是指定的初值

    vector<double> v(10,6.6);
    

尾部元素扩张

使用push_back()在vector容器尾部追加新元素,vector容器会自动分配新的内存空间。

可对空的vector对象扩张也可以对已有元素的vector扩张

#include<iostream>
#include<vector>
using namespace std;

int main(){
	vector<int> v;
	v.push_back(1);
	cout<<v[0]<<endl;
	
	return 0;
} 

//输出结果
//1

使用下标方式访问vector元素

类似数组

用迭代器访问vector元素

  • 迭代器的类型一定要与它要遍历的vector对象的元素类型一致
  • 使用迭代器配合循环语句来对vector对象进行遍历访问
vector<int>::iterator it;
for(it=v.begin();it!=v.end();it++){
	cout<<*it<<"\t";
}
cout<<endl;

元素的插入

  • insert() 方法可以在vector对象的任意位置前插入一个新的元素

  • 插入位置后的所有元素依次向后挪动一个位置

  • insert()方法要求插入的位置,是元素的迭代器位置,而不是元素的下标。

    //在第2个元素前插入一个新元素1
    v.insert(v.begin()+2,1);
    

元素的删除

  • erase()方法可以删除vector中迭代器所指的一个元素或一段区间中的所有元素

  • 删除的区间,是左闭右开区间,[  )

  • 删除的位置,是元素的迭代器位置,而不是元素的下标。

  • clear()方法则以此性删除vector中的所有元素

    //删除第2个元素
    v.erase(v.begin()+2);
    
    //删除迭代器从第1到第5区间的所有元素
    //删除的包含第1位,不包含第5位
    v.erase(v.begin()+1,b.begin()+5);
    
    //清空向量
    v.clear()
    

向量的大小

  • 使用size()方法可以返回向量的大小,即元素的个数

  • 使用empty()方法返回向量是否为空

    v.size();
    v.empty();
    

使用reverse()反向排列算法

  • reverse()算法可将向量中某段迭代器区间元素进行反向排列

  • 左闭右开区间,[  )

  • reverse反向排列算法,需要包含头文件 algorithm

    #include<iostream>
    #include<vector>
    #include<algorithm>
    using namespace std;
    
    int main(){
    	vector<int> v(10);
    	for(int i=0;i<10;i++){
    		v[i]=i;
    	}
    	reverse(v.begin(),v.end());
    	vector<int>::iterator it;
    	for(it=v.begin();it!=v.end();it++){
    		cout<<*it<<"\t";
    	}
    	cout<<endl;
    	return 0;
    } 
    

使用sort算法对向量元素排序

  • 使用sort算法,需要声明头文件

    #include<algorithm>
    
  • sort算法要求使用随机访问迭代器进行排序,在默认情况下,对向量进行升序排列

  • 左闭右开区间,[  )

    //升序排列sort(v.begin(),v.end());
    
  • 自己设计排序比较函数,然后把这个函数指定给sort算法。

    sort就根据这个比较函数指定的排序规则进行排序

    //自己设计排序比较函数,对元素的值进行降序排列
    bool Comp(const int& a,const int& b){
    	return a>b;
    }
    
    sort(v.begin(),b.end(),Comp);
    
    #include<iostream>
    #include<vector>
    #include<algorithm>
    using namespace std;
    bool Comp(const int& a,const int& b);
    
    int main(){
    	vector<int> v(10);
    	for(int i=0;i<10;i++){
    		v[i]=i;
    	}
    	sort(v.begin(),v.end(),Comp);
    	vector<int>::iterator it;
    	for(it=v.begin();it!=v.end();it++){
    		cout<<*it<<"\t";
    	}
    	cout<<endl;
    	return 0;
    } 
    
    bool Comp(const int& a,const int& b){
    	return a>b;
    }
    
  • sort()函数的第三个参数,还可以使用这样的语句告诉程序所采用的排序原则

    less<数据类型>()   //从小到达排序
    greater<数据类型>()//从大到小排序
    
    sort(v.begin(),v.end(),less<int>());
    
    #include<iostream>
    #include<vector>
    #include<algorithm>
    using namespace std;
    bool Comp(const int& a,const int& b);
    
    int main(){
    	vector<int> v(10);
    	for(int i=0;i<10;i++){
    		v[i]=i;
    	}
    	sort(v.begin(),v.end(),greater<int>());
    	vector<int>::iterator it;
    	for(it=v.begin();it!=v.end();it++){
    		cout<<*it<<"\t";
    	}
    	cout<<endl;
    	return 0;
    } 
    

两个STL

  • SGI STL是由Silicon Graphics Computer Systems 公司参照HP STL实现的,只要设计者仍是Alexandar Stepanov, 被Linux的C编译器GCC所采用。

    SGI STL是开源软件,可以在http://www.sgi.com/网站上下载。

  • STLport是俄国人Boris Fomitchev建立的一个free项目,是开放源代码的,主要目的是使SGI STL的基本代码都适用于VC和C Builder等多种编译器,源码可以在http://www.stlport.com/下载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暴风雨中的白杨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值