Functional Programming in C++ 学习笔记FPpr4&3

学习笔记5爷忘记保存了,吐了

这是4的笔记

//C++template泛型编程(模板)
#include 
#include 

using namespace std;

template <typename T>//这个名称可以在函数定义中使用,就和int list一样,作为一种新的数据类型
inline T const& Max(T const& a, T const& b)
{
    return a < b ? b : a;
}//内联函数:在每个调用T函数的地方直接改成执行return后的代码,防止不断调用子函数占用太多栈空间
//不能包含复杂的结构控制语句例如 while、switch,并且不能内联函数本身不能是直接递归函数
//仅仅是一种建议,具体看编译器的意思

int main()
{
    int i = 39;
    int j = 20;
    cout << "Max(i, j): " << Max(i, j) << endl;

    double f1 = 13.5;
    double f2 = 20.7;
    cout << "Max(f1, f2): " << Max(f1, f2) << endl;

    string s1 = "Hello";
    string s2 = "World";
    cout << "Max(s1, s2): " << Max(s1, s2) << endl;

    return 0;

这是3的笔记

//过滤和转换
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;

//首先,什么是插入迭代器?插入迭代器是指被绑定在一个容器上,可用来向容器插入元素的迭代器。 
//back_inserter:创建一个使用push_back的迭代器
//inserter:此函数接受第二个参数,这个参数必须是一个指向给定容器的迭代器。元素将被插入到给定迭代器所表示的元素之前。
//front_inserter:创建一个使用push_front的迭代器(元素总是插入到容器第一个元素之前)
//由于list容器类型是双向链表,支持push_front和push_back操作,因此选择list类型来试验这三个迭代器。
void inserter_test() {
	list<int> lst = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
	list<int> lst2 = { 10 }, lst3 = { 10 }, lst4 = { 10 };
	copy(lst.cbegin(), lst.cend(), back_inserter(lst2));
	//lst2包含10,1,2,3,4,5,6,7,8,9
	copy(lst.cbegin(), lst.cend(), inserter(lst3, lst3.begin()));
	//lst3包含1,2,3,4,5,6,7,8,9,10
	copy(lst.cbegin(), lst.cend(), front_inserter(lst4));
	//lst4包含9,8,7,6,5,4,3,2,1,10
	
}
//transform(first,last,result,op);
//first是容器的首迭代器,last为容器的末迭代器,result为存放结果的容器,op为要进行操作的一元函数对象或sturct、class。
char op(char ch)
{

	if (ch >= 'A' && ch <= 'Z')
		return ch + 32;
	else
		return ch;
}
int main() {
	//inserter_test();
	string first, second;
	cin >> first;
	second.resize(first.size());
	transform(first.begin(), first.end(), second.begin(), op);
	cout << second << endl;
	return 0;
}
}

你可能感兴趣的:(函数式编程C++学习笔记)