C++泛型算法 您所在的位置:网站首页 泛型算法find C++泛型算法

C++泛型算法

2024-07-13 04:29| 来源: 网络整理| 查看: 265

一、泛型算法的概念及特点

泛型算法其实就是被与容器类型无关的、广泛使用的一种计算方法。使用是引用头文件algorithm.

最常见的有: - 查找 - 重排元素(按一定规则排序) - 删除 - 替换

泛型算法特点如下: - 使用迭代器作为输入,使算法独立于操作对象 - 算法依赖于元素类型的操作

对于第二点,我们以find为例子说明算法如何依赖于元素,只要元素支持判等符号,那么这个算法就能实现。已知支持判等(==)的元素类型有:int double string。如果说,一个元素类型是C风格字符串char *,那就不能使用这个算法了,因为没有定义判等(==)操作。

二、泛型算法的分类

附录A有详细说明,大致内容如下: 这里写图片描述

算法永远不会执行容器操作,它运行在迭代器上。也就是永远不会执行添加和删除元素。这样设计的原因: - 算法的通用性考虑。算法不直接操作容器元素,而是操作迭代器。对于不同数据类型就不需要重写算法了 - 迭代器的属性决定最终这个算法是只读还是可删可写

三、书中详细讲解的算法

一般而言算法都是遍历整个(部分)容器,故前两参数一般都是指操作的对象集的范围。如:算法名称(vec.begin(),vec.end(),para1)

3.1 只读算法 find 查找

范围内查找容器中的某个元素: - 若存在指向该元素的迭代器; - 若不存在范围尾后迭代器vec.end()

例子:在vector ivec{1,2,3,4,5,6}中查找元素7和4两个元素。

int main() { vector ivec{1,2,3,4,5,6}; auto result=find(ivec.begin(),ivec.end(),6); if(result!=ivec.end()) cout1.1,2.3,3.3,4.11,5.33,6.09}; cout"apple"}; cout1,2,3}; vector ivec(ilst);//类型不同,初始化失败 copy(ilst.begin(),ilst.end(),back_inserter(ivec));

result

result2

result

3.1 重排容器元素算法

算法将会改变容器的顺序

sort 排序

输入用迭代器标记的、需要整理的容器范围,算法结果是:整理成从小到大顺序(字典序),没有返回值。

sort(vec.begin(),vec.end()); unique 去除相邻重复元素

输入迭代器范围,返回值是一个迭代器,指向最后一个不重复元素之后,返回值迭代器后元素仍然存在,但是结果是未定义的。

vector vec{"the","quick","red","jumps","over","the","slow","red","turtle"}; for(auto i:vec) cout


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有