目录
迭代器
迭代器提供对一个容器中的对象的访问方法,并且定义了容器中对象的范围。
迭代器(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的元素的位置,返回指针/迭代器
注意:若要获取数组下标要减去数组首地址
当不存在时,函数返回若存在该元素,这个元素应该在的位置(即插入该元素的位置)