首页 > 编程语言 >C++_控制结构和pipeline

C++_控制结构和pipeline

时间:2023-01-04 10:57:34浏览次数:47  
标签:pipeline 函数 迭代 int 编程 C++ 控制结构 类型

控制结构

过程式编程范式叫做——指令式编程,而把函数式编程范式叫做——声明式编程
过程式编程范式
  控制结构允许程序根据不同的状态、条件和参数来选择不同的处理和执行路径     
   顺序结构、分支结构、循环结构
   迭代
  递归 recursing & tail recursion optimization (递归&尾递归优化) 
函数式编程范式
     函数是一等公民,可以像数据一样传来传去。
     高阶函数
     递归
     pipeline
     惰性求值
     柯里化
     偏应用函数

C++ 控制结构

01.C++ 顺序结构
  顺序结构是指按照顺序一句一句地执行
02.C++ 选择语句 if 和 switch 提供了一种有条件地执行代码节的方式
    if-else 语句控制条件分支
	   从 C++17 开始,if 语句还可能包含声明和初始化命名变量的 init-statement 表达式。
       		 当变量仅在 if-statement 范围内需要时,请使用 if-statement 的此形式
       C++17 开始,可以使用函数模板中的 if constexpr 语句做出编译时分支决策,而无需求助于多个函数重载
       将 __if_exists   __if_not_exists
	  
	switch 语句体由一系列 case 标签和一个 optionaldefault(可选)标签组成  
	  
03.C++ 提供四个迭代语句 - 
      while、do、for 和 range-based for。	  
      	for ( init-expression ; cond-expression ; loop-expression )
              statement
			  
        for ( for-range-declaration:expression)
	  跳转语句执行控制
 		  break、goto 或 return 时,while 循环也可以终止
		  continue 将控制转移到 while 循环的下一次迭代
		  
04.C++ STL list迭代器及用法  list 容器迭代器函数
    begin()	返回指向容器中第一个元素的双向迭代器(正向迭代器)。
    end()	返回指向容器中最后一个元素所在位置的下一个位置的双向迭代器。(正向迭代器)	 
     begin() rbegin()  cbegin() crbegin()
	 end() rend() cend() crend()
	   即要么使用 front() 和 back() 成员函数,要么使用 list 容器迭代器
运算符:
    递增运算符 递减运算符
    ?:运算符
   
	   
	   
first class function(头等函数) 在C++中,我们可以借助于函数对象或者函数指针来实现高阶函数 
  Map在C++中的直接映射是transform(头文件< algorithm>)
  Reduce在C++中的直接映射是accumulate(头文件< numeric>)
  Filter的功能是进行过滤,筛选出符合条件的成员。在C++中的映射有copy_if和partition
  pipeline(管道)
      C++20引入范围库(ranges)之后,可以使用operator |链接两个范围适配器闭包对象的结果
  currying (柯里化) recursing & tail recursion optimization (递归&尾递归优化)


C++98/03中的函数对象,和C++11中的Lambda表达式、std::function 和 std::bind 让C++的函数式编程变得容易
  bind函数可以看作一个通用的函数适配器,所谓适配器,即使某种事物的行为类似于另外一种事物的一种机制,
     如容器适配器:stack(栈)、queue(队列)、priority_queue(优先级队列)。
  bind函数接受一个可调用对象,生成一个新的可调用对象来适配原对象
  
  
lambda表达式具有如下形式:[捕获列表](参数列表)->返回类型{函数体}
    int(*f)(int,int)=[](int a,int b){return a+b;};//lambda表达式的类型是函数指针类型	
    auto f=[](int a,int b){return a+b;};//与上面lambda表达式的声明是等价的	
	
fuction<T>对象是对C++中现有的可调用实体的一种类型安全的包裹,而函数指针这类可调用实体,是类型不安全的。
 所以任何用到函数指针的地方,我们都应该尽可能使用fuction<T>来替代。
   function<int(int,int)>f1=[](int a,int b){return a+b;};//注意没有*	 

C++中没有函数类型,但是有函数指针的概念,函数指针指向的是函数而非对象 

python

python语言中,选择结构的语法使用关键字if、elif、else
python的循环结构中,常见的循环结构是for循环和while循环
   :for…in…循环
   使用 continue 语句,可以跳过执行本次循环体中剩余的代码,转而执行下一次的循环。
   只用 break 语句,可以完全终止当前循环

可迭代对象(Iterable)
   __iter__方法的作用是让对象可以用for ... in循环遍历
       实做了两件事:第一件事是调用__iter__()获得一个可迭代器,第二件事是循环调用__next__()

高阶函数指的是接收函数作为参数的函数,
     Python 内置的高阶函数有:map() 、reduce() 、filter() map() 接收一个函数和一个序列作为参数

pandas这个第三方库来完成对数据的预处理和分析工作,而在该库中有一个叫做apply()的函数可以实现很好的可自定化
Python 也支持面向对象的三大特征:封装、继承和多态   

Java

01.三种结构

02.迭代器(Iterator)模式,又叫做游标(Cursor)模式
该类需继承Iterable接口,实现接口的iterator()方法;
   定义一个实现Iterator接口的类,实现接口的hasNext()方法与next()方法。

    Iterator<Integer> iterator = list.iterator();
    // 使用迭代器iterator遍历list中的每一个元素,并打印出来
    while(iterator.hasNext())
        System.out.print(iterator.next() + " ");
03.foreach又称增强for,是for循环的一个特殊简化版		
 list.forEach(any->System.out.println(any));
   forEach()方法是Iterable接口中的一个方法	 
04.函数式表达
    方式一:传统接口实现类
	方式2:匿名内部类
	方式3:Lambda表达式
Java8在Java中通过lambda表达式、Stream API引入了函数式编程
  匿名函数  高阶函数	

Scala

函数式编程范式 Scala中的集合对象都有foreach和map两个方法。
   两个方法的共同点在于:都是用于遍历集合对象,并对每一项执行指定的方法。
   而两者的差异在于:foreach无返回值(准确说返回void),map返回集合对象

R语言

 匿名函数,闭包(由函数编写的函 数)和函数列表。
  函数定义使用function关键字
  向量化  向量化编程
   R语言中共apply函数。 R语言中提供了一个apply()函数,可将一个任意函数“应用”到矩阵、数组、数据框的任何维度上

编程概念

  面向过程式编程
  面向对象编程
  函数式编程   统计中的R  SQL
  泛型编程
     动态类型:一般来讲动态类型不需要泛型,因为泛型就是让类型动起来
	 静态类型检查 Static Typing Java、C/C++
       模板是 C++ 中的泛型编程的基础 模板是基于用户为模板参数提供的参数在编译时生成普通类型或函数的构造
	 Java泛型-变量声明的时候的类型
	      本质是参数化类型,也就是说所操作的数据类型被指定为一个参数(type parameter)
		   这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法
		  类型擦除 
变量		  
  C/C++/Java 是静态语言 + 强类型;
  JavaScript/PHP 是动态语言 + 弱类型;
  Python 是动态语言 + 强类型。
  内存中存取数据要明确三件事情:数据存储地址、数据的长度以及数据的处理方式。
  Scala 编译器通常可以推断出表达式的类型,因此你不必显式地声明它-变量的类型推断。
Lambda演算构成了所有函数式编程语言的基础--》 函数级编程
   闭包 ( Closure ) 在操作中,闭包是指一条记录,存储着一个函数和它的环境变量。这个函数既可以是有名函数,也可以是匿名函数

标签:pipeline,函数,迭代,int,编程,C++,控制结构,类型
From: https://www.cnblogs.com/ytwang/p/17024244.html

相关文章

  • 工厂模式C++实现 (内附简单源码实现)
    抽象工厂模式为什么要用抽象工厂模式?*举个实际应用的例子,一个显示器电路板厂商,旗下的显示器电路板种类有非液晶的和液晶的;这个时候,厂商建造两个工厂,工厂A负责生产非......
  • C++ | 4-易用性改进
    使用auto自动类型推断,顾名思义,就是编译器能够根据表达式的类型,自动决定变量的类型(从C++14开始,还有函数的返回类型),不再需要程序员手工声明。但需要说明的是,auto并没有......
  • C++ 数学与算法系列之牛顿、二分迭代法求解非线性方程
    1.前言前文介绍了如何使用“高斯消元法”求解线性方程组。本文秉承有始有终的态度,继续介绍“非线性方程”的求解算法。本文将介绍2个非线性方程算法:牛顿迭代法。二......
  • C++11:移动构造函数
    1.拷贝构造函数中的深拷贝问题在C++98/03标准中,如果想用其它对象初始化一个同类的新对象,只能借助类中的拷贝构造函数。拷贝构造函数的实现原理很简单,就是为新对象复制......
  • Jenkins实践指南-09-pipeline 扩展
    5.pipeline扩展  [作者:Surpassme]如果在大量使用pipelin后,会发现Jenkins内置的功能并不能满足我们的需求,这时就需要pipeline扩展。5.1pipeline中使用函数  ......
  • C++中的模板
    如果函数的参数类型不确定,可以使用函数模板template<classT>Tmax(Ta,Tb){ returna>b?a:b;}如果类的成员类型不确定,可以使用类模板。这样定义类:template......
  • 【C++】万能头文件 bits/stdc++.h 的用法和优缺点
    一.使用方法1#include<bits/stdc++.h>23intmain()4{5//writecodehere67return08}二、头文件内容1//C++includesusedforpr......
  • C++实现线性表-顺序表的合并操作代码
    #include<iostream>#include<cstdlib>//C++动态分配存储空间usingnamespacestd;#defineOK1#defineERROR0#defineMAXSIZE100typedefintElemtype;typedefintStat......
  • C++:拷贝构造函数
    1.拷贝和拷贝构造函数拷贝和复制是一个意思,对应的英文单词都是copy。对于计算机来说,拷贝是指用一份原有的、已经存在的数据创建出一份新的数据,最终的结果是多了一份相同......
  • C++继承
    一、继承的写法子类:继承父类 例:classA   ------>父类{public:A(stringname,intage):name(name),age(age){}   -->初始化参数列表protected: string......