算法库操作类型,函数对象是什么?

  1. 非修改性操作:两个查找find,cout;for_each
  2. 修改性操作:copy,replace,sort,remove
  3. 数值操作:accumulate,inner_product
  4. 排序与相关操作:sort,partial_sort..。

函数对象重载了操作符(),因此可以像函数一样被调用。通常作为算法库中函数的参数。

主要特性可以存储状态

lambda可以定义匿名函数对象,通过捕获变量实现在算法中使用外部状态

容器、迭代器、算法之间的关系是怎样的?他们是如何结合在一起的?

迭代器用于方便地访问或操作容器内的元素,算法则提供了现成的接口来操作迭代器,便于实现较为复杂的功能

什么是迭代器失效问题?该问题是如何产生的?怎样避免产生迭代器失效问题

迭代器指向了未定义区域

一般是容器扩容或数据修改时,前者会重新分配内存,使迭代器全部失效,后者如删除操作时,也会导致失效。

避免进行会导致迭代器失效的操作,或是使用一些方法减少失效可能性,如删除元素后令迭代器指向下一个元素。

什么是回调函数,注册回调函数,执行回调函数?(掌握std::bind用法,非常重要)

作为一个参数传给另一个函数。以便在某种情况发生时被再次调用

注册就是将一个回调函数与一个具体事件或操作关联起来的过程,告诉程序在什么条件下应该调用哪个函数。

执行就是回去调用回调函数。

bind允许绑定一个可调用的对象(如函数,函数指针,成员函数指针,lambda对象)到一组参数上,从而创建了一个新的可调用对象,可供日后调用。

std::bind可以绑定什么?bing绑定成员函数的传参有什么区别?

普通函数的参数,函数对象(重载了operator()),成员函数指针或引用,成员变量,lambda表达式

绑定类的成员函数时,需要在 std::bind第二个参数位置提供一个对象的引用或指针,这个对象的引用或指针会作为成员函数(第一个参数)的 this 指针使用。

img

更新时间: