STL学习笔记

这里讲解几种常用的STL函数

一:vector
vector的优势显而易见,首先可以无限制自动调整数组长度(~~妈妈再也不用担心我MLE了~),然后还能用任意类型来开数组,在很多算法都会用到

#####(暴力应该不算吧。。。

#### vector 使用方法:
vector<int> a;                 //定义了一个整型不定长数组a     
vector<double> score;   //定义了一个双精度浮点型不定长数组score
vector<node> stu;          //定义了一个结构体类型的不定长数组stu
以上定义相当于定义了一个一维数组name[size],只是size不确定,其长度可以根据需要而变化。其中,typename可以是任何基本类型,如int、double、char、结构体等,也可以是容器。

注意:如果typename也是一个STL容器,那么定义时需要在两个“>”符号之间加一个空格,不然编译器会误认为是位运算的右移符号“<<”,例如:

vector<vector<int>  > a;  //定义了一个两个维度都可变的二维整型数组a 
    
vector<int> a[100];           //定义了一个第一维长度为100,第二位不限长度的二维数组a
vector的访问:
访问vector中的元素一般有两种方式:下标访问 和 迭代器(iterator)访问。

 第一种是通过“下标”访问的。例如,对于容器vector<int> v,可以使用v[index]来访问它的第index个元素。其中,0≤index≤v.size() – 1,v.size()表示vector中元素的个数。

 第二种是通过“迭代器”访问的。可以将迭代器理解为一种类似指针的变量,使用前需要提前定义,其定义为:vector<typename>::iterator it,这个it就是一个迭代器,可以通过“*it”来访问该容器里的元素值,下面举个例子:

 vector<int>::iterator it = v.begin();   //定义一个迭代器it,初始化为容器v的首元素地址,这是*it相当于v[0],*(it + i)相当于v[i]。

 迭代器还可以进行自加自减操作,如it++,++it,it--,--it,注意:迭代器不支持“it<v.end()”的写法,只能是“it != v.end()”, v.end()并不是取v容器尾元素地址,而是尾元素下一个地址。
 例:for(vector<int>::iterator it = v.begin(); it != v.end(); it ++) printf(“%d”,*it);

lower_bound返回二分查找在去重排序数组中第一个等于或大于num[i]的值的地址   - 数组首地址。

upper_bound返回的是最后一个大于等于val的位置,也是有一个新元素val进来时的插入位置   -数组首地址.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值