***这些算法的内部都是利用元素类型的<或者是==
只读算法:(在只读算法中最好使用cbegin()和cend()而不是begin()和end()) 操作一个序列的只读算法:find:
find(c.cbegin() , c.cend() , val);
参数:第一、二参数是元素范围的输入迭代器,第三参数是一个值
返回值:指向第一个等于给定值的迭代器
count:count( c.cbegin() , c.cend() , val);
参数: 第一、二参数是元素范围的输入迭代器,第三参数是一个值
返回值:序列中给定值出现的次数
accumulate:accumulate( c.cbegin(), c.cend(), val);
参数:第一、二参数是元素范围的输入迭代器,第三参数是一个值(初始值)
初始值:决定了加法运算符的重载和返回值的类型【例如初始值是一个石头】
返回值:给定范围的所有元素的和加上初始值
操作两个序列的只读算法: equal:equal( c1.cbegin() , c1.cend() , c2.cbegin());
参数: 第一、二参数是元素范围的输入迭代器,第三参数是第二个容器的首元素的输入迭代器
返回值:一个bool值,确定是否相等
note1:两个序列类型可以不相同,元素类型只要可以相互转换即可
note2:默认的是两个序列的大小相等,否则会出错,他会试图访问不存在的元素。
因为操作两个序列的算法一共有两种版本(区别在于如何传第二个序列):
1.一共给四个输入迭代器,前两个是第一个序列的元素范围,后两个是第二个序列的元素范围。
2.给三个输入迭代器,此时两个序列是否相等就需要自己保证了。
==============================================================================================
重写容器元素的算法: fill:fill(c.begin() , c.end() , val); //将给定范围的序列的每个元素重置为val
参数: 第一、二参数是元素范围的输入迭代器,第三参数是一个值
返回值:没说,看了源码是void
fill_n:fill(c.begin() , c.size() , val);
参数: 第一是元素输入迭代器,第二个参数是序列的大小,第三参数是一个值
note:也必须保证到n是有效的【这种给一个迭代器的都要自己保证】
copy(与插入迭代器搭配可以做到插入元素的作用):copy( c1.begin() , c1.end() , c2.begin());
参数: 第一、二参数是元素范围的输入迭代器,第三参数是接受拷贝的容器的首元素的迭代器
返回值:目的位置迭代器(递增后)的值
note:第一个和第二个序列的大小必须相同,而且两个序列必须有值而不是只分配了内存是空的
(因为泛型算法是不能做到插入和删除的)
replace:replace(c.begin() ,c.end() , 0 , 42); //将中所有为0的值改成42
参数: 第一、二参数是元素范围的输入迭代器,第三参数是目的值,第四修改值
replace_copy:
replace_copy( c1.begin() , c1.end() , back_inserter(c2) , 0 , 42);//原序列不变,变的是c2
参数: 第一、二参数是元素范围的输入迭代器,第三插入迭代器,第四参数是目的值,第五修改值
重排容器元素的算法: sort:sort(c.begin() , c.end());
按照元素类型的<进行排序
unique:
unique( c.begin() , c.end());
将相邻重复项消除,返回最后一个不重复元素之后的位置。