STL之vector详解

STL是一个很棒的东西,下面讲一讲STL容器vector的一般用法。

介绍

vector是一种动态数组,是基本数组的类模板。其内部定义了很多基本操作。 ——摘自度娘

vector之所以被称为动态数组,是因为它既可以采用下标对vector的元素进行访问,和数组一样高效。还可以对它的大小进行动态改变,并且它的大小会被容器自动处理。

定义

使用vector的标准模板,就需要在添加vector的头文件,即#include<vector>
定义如下:

vector<type> name	

type是指定义的向量元素类型,name是定义向量的名字。

初始化

vector<int> f(5); // 定义有5个整形的向量f
vector<long long> a(4,0x7fffff);//定义有4个长整形的向量a,并且每个元素值都为0xfffff
int b[4]={1,2,3,4};
vector<int>a(b,b+4);//将b[0]至b[3]存到vector<int> a中,即a[0]至a[3]

元素访问

  • 可以像数组一样通过元素下标进行访问,下标从 0 0 0 s i z e ( ) − 1 size()-1 size()1
vector<int>a(10,5);
for(int i=0;i<a.size();i++)
	printf("%d ",a[i]);
  • 可以通过迭代器访问,类似于指针。
vector<int>a(10,5);
vector<int>::iterator it;
for(it=a.begin(); it!=a.end();it++)
  printf("%d ",*it);

元素操作

常用的有:

vector<int> a,b;
a.empty()//判断a是否为空,空返回1,否则返回0
a.size()//返回向量元素个数
a.push_back()//向尾部添加新元素
a.pop_back()//删除尾部的元素
a.clear()//清空a中元素
a.back()//返回a中的最后一个元素
a.front()//返回a中的第一个元素
a.max_size()//返回容器a中最大数据的数量
a.swap(b)//将a和b元素互换
a.insert(a.begin()+2,5)//在a的第3个元素的位置插入一个元素5
a.insert(a.begin()+2,5,1)//在a的第3个元素的位置插入5个元素都是1
a.erase(a.begin()+1,a.begin()+3)//删除a.begin()+1到a.begin()+3的元素(不包括a.begin()+3) 

算法

常用的有:

#include<iostream>
#include<cstdio>
#include<vector>
#include<algorithm> 
using namespace std;
vector<int> a;
bool cmp(const int &a,const int &b)
{
	return a>b;
} 
int main()
{
	sort(a.begin(),a.end());//把a.begin()到a.end()的元素进行从小到大排序(不包括a.end()元素)
	find(a.begin(),a.end(),5);//把a.begin()到a.end()的元素中查找5的元素返回它的位置
	reverse(a.begin(),a.end());//将元素翻转(在vector中,如果一个函数中需要两个迭代器,一般后一个都不包含.)
	sort(a.begin(),a.end(),cmp);//自定义排序 
	return 0;
} 

总结

vector在某些方面要比数组效率更高,要根据实际情况合理选择。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值