【C++学习】迭代器介绍以及algorithm头文件下的常用函数

目录

 

迭代器

algorithm头文件下的常用函数

max(),min(),abs()

swap()

reverse()

next_permutation()

fill()

sort()

普通变量排序:

 结构体数组的排序:

对容器的排序: 

lower_bound(),upper_bound()


迭代器

迭代器提供对一个容器中的对象的访问方法,并且定义了容器中对象的范围
迭代器(Iterator)是指针(pointer)的泛化,它允许程序员用相同的方式处理不同的数据结构(容器)。
(1)迭代器类似于C语言里面的指针类型,它提供了对对象的间接访问。
(2)指针是C语言中的知识点,迭代器是C++中的知识点。指针较灵活,迭代器功能较丰富。
(3)迭代器提供一个对容器对象或者string对象的访问方法,并定义了容器范围

迭代器和指针的区别:迭代器是一个类模板,指针是指向某某的指针变量。详见:https://blog.csdn.net/weixin_42067873/article/details/103755114

 

algorithm是C++的标准模版库(STL)中最重要的头文件之一,提供了大量基于迭代器的非成员模版函数。简而言之,这是一个功能强大的算法库,可以在这里找到大量通用的算法。

algorithm头文件下的常用函数

max(),min(),abs()

浮点型取绝对值:math头文件下的fabs()

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

int main(){
    int x=1,=-2;
    max(x,y);//参数必须是两个,可以是浮点数
    min(x,y);
    max(x,max(y,z));//强行三个参数的写法
    
    abs(x);//x必须是整数
}

swap()

swap(x,y);//交换值

reverse()

reverse(it,it2)能将[it,it2)之间的元素翻转

int a[10]={0,1,2,3,4,5,6};
reverse(a,a+4);//翻转a[0]-a[3]

next_permutation()

next_permutation()给出一个序列在全排列中的下一个序列

int a[10]={0,1,2,3,4,5,6};
next_permutation(a,a+4);

fill()

fill()可以把数组中的某一段区间赋为某个相同的值

int a[10]={0,1,2,3,4,5,6};
reverse(a,a+4,233);//a[0]-a[3]赋值为233

sort()

sort(首元素地址,尾元素地址的下一个地址,compare函数(选填));

可对int(默认从小到达),double(从小到大),char(字典序)排序。

如何定义compare函数:cmp     <:从小到大 >:从大到小

普通变量排序:

bool cmp(int a,int b){
  return a>b;//可以理解为当a>b时把a放在b前面
}

 结构体数组的排序:

struct node{
  int x,y;
}ssd[10];
//一级排序,将ssd数组按照x从大到小排序
bool cmp(node a,node b){
  return a.x>b.x;
}
//二级排序,先x从大到小,x相等时按照y从小到大
bool cmp(node a,node b){
  if(a.x!=b.x)
    return a.x>b.x;
  else return a.y<b.y;
}

对容器的排序: 

在stl标准容器中,只有vector,string,deque可以使用sort。因为set,map这种容器是用红黑树实现的,元素本身有序,所以不允许使用sort。

以vector为例:

bool cmp(int a,int b){//因为vector中元素为int型
 return a>b;
}

int main(){
    vector<int> vi;
    vi.push_back(3);
    vi.push_back(1);
    vi.push_back(2);
    sort(vi.begin(),vi.end(),cmp);
}

string型可以按字典序输出:

string str[3]={"bbbbb","ccc","aaa"};
sort(str,str+3);//按字典序从小到大输出

按照字符串长度从小到大输出:

bool cmp(string str1,string str2){
    return str1.length()<str2.length();
}

string str[3]={"bbbbb","ccc","aaa"};
sort(str,str+3,cmp);

lower_bound(),upper_bound()

这两个函数需要使用在一个有序数组中。

lower_bound(first,last,val);//寻找[first,last)范围内第一个值大于等于val的元素的位置,返回指针/迭代器

upper_bound(first,last,val);//寻找[first,last)范围内第一个值大于val的元素的位置,返回指针/迭代器

注意:若要获取数组下标要减去数组首地址

当不存在时,函数返回若存在该元素,这个元素应该在的位置(即插入该元素的位置)

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值