随着物联网、大数据、区块链、人工智能等新兴的IT技术浪潮,为满足系统底层的安全和性能机制,顺应时代的发展,纵观各类开发语言和众多前段后端的架构体系,C++开发体系和技术架构正如中华民族之伟大复兴一样将重登IT时代顶峰。
大家知道,STL是C++泛型编程的核心,因为它具备大量的模板库,在利用编程解决实际问题领域解决了绝大部分问题,要想把它的底层原理和实现逻辑全部弄清楚几乎是不可能的,只能在项目开发的过程中不断的尝试与使用它提供的模板来建设自己的软件体系。
本人目前处于认知体系的不断改造、重构和升华的过程中,在这里主要是为了把自己的学习过程记录在此,便于自身的知识逻辑的梳理、消化与回溯,当然也希望能与跟我一类的更多人共鸣。
今天尝试利用algorithm算法库中的transform模板类快速的完成了两个序列性容器的加、减、乘的运算,同时在for_each遍历完成输出的时候不再去堆上建设一个简单的inline函数,而是利用lambda表达式来建立一个匿名函数完成简单的输出功能。测试代码演示如下:
其中的plus、minus、和multiplies均是定义在xstddef中的仿函数模板,来看看它的实现逻辑吧:
后边的乘法实现代码并不完整,但加法和减法是完整的。以此类推,触类旁通好吧?
下面我们来看看count和count_if的使用方法,他们都是包含在algorithm库中的类模板成员函数,继承与iterator_traits模板类。在条件统计count_if中第三个参数要求传递一个函数,也就是按照这个给定的函数逻辑实现统计计数,为了节省空间开销,这个地方我也没有在堆上自定义函数,而是使用了一个巧妙的办法,调用functional库中的bind1st和bind2nd两个模板函数来实现统计逻辑,并在其内部参数中调用less和greater这两个仿函数模板实现条件逻辑,代码如下:
添加头文件和主函数入口:
#include<algorithm>
#include<functional>
#include<numeric>
#include<iostream>
using namespace std;
int main()
以上代码的程序运行结果如下:
11 22 33 44 55
9 18 27 36 45
10 40 90 160 250
3
9
9
1
1