今日c++学习心得

理论课

今天学习了泛型算法(generic algorithm),是定义在头文件algorithm里的
之所以叫泛型算法,是因为它们可以用于不同类型的元素和多种容器类型,也就是说不依赖于容器
算法不直接操作容器,所以永远不会改变底层容器的大小,但是可以改变元素顺序
算法都需要接受一对迭代器表示范围(左闭右开的),以及一些其他参数
算法不检查写操作,保证过程安全是程序员的责任(目的位置要足够大)
算法通常提供了重载默认运算符的方法,可以通过传递一个谓词实现
但是,谓词只能接受特定的一个或两个参数,如果还需要更多的参数,就要用到lambda表达式
lambda表达式是一个可调用对象,有一个返回类型,一个参数列表,一个函数体和捕获列表
捕获列表是lambda所在函数中定义的局部变量,如果要指定返回类型,需要使用尾置返回
lambda可以出现在函数中,并使用明确指明的局部变量
捕获方式有值捕获和引用捕获,还可以使用隐式捕获
还可以用bind函数实现类似的功能,特别地,bind可以自定义传参的顺序
迭代器分为插入迭代器,流迭代器反向迭代器
算法形参模式有以下四种

  • alg(beg, end, other args);
  • alg(beg, end, dest, other args);
  • alg(beg, end, beg2, other args);
  • alg(beg, end, beg2, end2, other args);
    listforward_list有特定的算法,一般情况下应该使用他们都成员函数版本来减小消耗

实践课

完成了三道编程题——倒序拷贝,有条件地输出和重写书店程序