泛型算法只是依赖于迭代器的操作,而不是依赖于容器
泛型算法可以分为3大类:
下面的vec和vec2代表相同类型的容器
1.只读算法:只允许读取其输入范围内的元素,而不改变元素
find(vec.cbegin(),vec.cend(),k)
查找算法:前两个参数表示元素范围的迭代器,第三个参数k表示要查找的元素,查找成功则返回等于第一个元素的迭代器,查找失败返回尾后指针
accumulate(vec.cbegin(),vec.cend(),0)
求和算法:前两个参数表示元素范围的迭代器,第三个参数表示和的初始值,返回该类型的参数范围内的和,可以为int,string等
equal(vec.cbegin(),vec.cend(),vec2.cbegin())
比较算法:将第一个范围内的元素和第二个序列中的元素比较,如果对应元素都相等,返回true,否则返回false,这里默认第二个序列的元素数>=第一个范围内的元素数
2.写容器元素算法:将元素写入输入范围
fill(vec.cbegin(),vec.cend(),0)
表示迭代器范围内的值都被置为0(假设vec存的是int型)
fill_n(vec.begin(),vec.size(),0)
表示从指定迭代器 vec.begin() 开始以后的vec.size()个元素的值都被置为0(假设vec存的是int型)
注:上面的写算法不允许在空容器上调用,即容器中有几个元素,写算法才能写几个元素,只能修改,不能添加,如果想要添加只能使用插入迭代器(下篇会介绍)
copy(vec.cbegin(),vec.cend(),vec2.cbegin())拷贝算法:将迭代器范围内的元素拷贝到vec2容器中,这里默认第二个容器的空间能够存储该迭代器范围内的元素
replace(vec.cbegin(),vec.cend(),before,after)
替换算法:将容器迭代器范围内的元素中 所有为before的元素替换为after的元素,before和after分别为存储类型的具体数值
replace_copy(vec.cbegin(),vec.cend(),back_inserter(vec2),before,after)
替换算法:将容器迭代器范围内的元素中 所有为before的元素替换为after的元素,并插入到vec2中,before和after分别为存储类型的具体数值
3.重排容器元素算法
sort(vec.cbegin(),vec.cend())
排序算法:将迭代器范围内的元素按照定义的“<”来进行排序
unique(vec.cbegin(),vec.cend())
排序算法:将迭代器范围内的元素按照unique的标准库算法进行排序,使得不重复的元素出现在开始的位置,并且返回一个指向最后一个不重复元素之后的迭代器
注:要真正删除容器中的元素,必须使用容器操作,泛型算法只是依赖于迭代器的,向容器中插入元素可以不必使用容器操作,可以使用插入迭代器操作。