STL泛型算法总结

时间:2020-12-24 19:24:54

泛型算法只是依赖于迭代器的操作,而不是依赖于容器

泛型算法可以分为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的标准库算法进行排序,使得不重复的元素出现在开始的位置,并且返回一个指向最后一个不重复元素之后的迭代器

 

注:要真正删除容器中的元素,必须使用容器操作,泛型算法只是依赖于迭代器的,向容器中插入元素可以不必使用容器操作,可以使用插入迭代器操作。