当前位置:动态

5 vector中实现for_each算法_实时

2023-03-07 01:49:27 来源:哔哩哔哩

本项目GitHub:HuangCheng72/HCSTL: 我的STL实现 (github.com): https://github.com/HuangCheng72/HCSTL

进入正文。

for each是一种遍历数组或者链表或者各种集合的算法,实现简单,应用广泛。百度百科可以查到:“foreach 语句用于循环访问集合以获取所需信息,但不应用于更改集合内容以避免产生不可预知的副作用。” 它在Java中的实现有增强for循环语句,在C#中的实现有for_each语句,在C++ STL中,它也是一种算法,其作用是在遍历的同时执行一定的操作。


(资料图片)

下面我们就在 vector 中实现for_each遍历输出整个数组的数据,先默认数据全是POD类型数据,暂时不考虑non-POD类型数据。

vector.h:

这是非常简单的一个算法,很容易实现。

在main.cpp中测试一下:

那么,拓展到non-POD类型数据,该怎么做?

在我们的main.cpp里面,我们一直用来测试的myclass类,有一个getter函数,但是不是所有的类都有getter函数。而且,不能只是输出,用户可能还要进行其他的操作,实现其他的功能。

让for_each算法实现更多的功能,而不是只能输出,我们要让用户决定到底要对数据做什么。

在C语言中,让用户决定对数据做什么,我们可以用函数指针的方法。同样的数据,我们可以传入不同的函数指针,实现不一样的执行结果。在C++中这个方法也是适用的。

但是C++中,运算符可以重载这一特性,给了我们另一种实现的思路。

我们知道,在C语言和C++中,调用函数的方式一样,如下:

所以我们有一个思路,能不能在一个类或者结构体中,重载小括号(或者叫圆括号)运算符,让对象用起来像函数一样。这就是所谓的函数对象,也叫仿函数。以下就是一个仿函数的例子。

函数对象首先是一个对象,它具备类与对象对象的所有特点,函数对象的类可以有构造器,并且在构造函数对象的时候,可以用不同的值初始化,进而执行不同的行为,比起函数指针来它的代码可读性更好。以下是同一个函数对象类new出来的两个对象,同样参数可以输出不同的结果的例子。

而对于函数指针来说,这是不可能的,只要参数固定,结果必然是固定的。因此,函数对象比函数指针更加灵活。

我们使用函数对象来修改vector中for_each这一算法,就可以让for_each对数据实现更多的功能。

vector.h:

而后在main.cpp中,进行测试:

顺利运行,结果正确。

欢迎访问本项目的GitHub仓库,如果对您有帮助,麻烦给项目一个star,谢谢!

HuangCheng72/HCSTL: 我的STL实现 (github.com): https://github.com/HuangCheng72/HCSTL

关键词: 不是所有 下面我们 调用函数


5 vector中实现for_each算法_实时

2023-03-07

动态来源:哔哩哔哩

全球热推荐:蓝藻如何处理

2023-03-06

动态来源:万年历

什么是移动光宽带

2023-03-06

动态来源:万年历

泰迦奥特曼剧场版

2023-03-06

动态来源:互联网

世界观点:012是哪里的区号

2023-03-06

动态来源:万年历

凡客订单查询

2023-03-05

动态来源:互联网

ip4怎样设置_当前热门

2023-03-05

动态来源:万年历

全国一卷有哪些省-速看

2023-03-05

动态来源:万年历

教育