算法库操作类型,函数对象是什么?
- 非修改性操作:两个查找find,cout;for_each
- 修改性操作:copy,replace,sort,remove
- 数值操作:accumulate,inner_product
- 排序与相关操作:sort,partial_sort..。
函数对象重载了操作符(),因此可以像函数一样被调用。通常作为算法库中函数的参数。
主要特性可以存储状态
lambda可以定义匿名函数对象,通过捕获变量实现在算法中使用外部状态
容器、迭代器、算法之间的关系是怎样的?他们是如何结合在一起的?
迭代器用于方便地访问或操作容器内的元素,算法则提供了现成的接口来操作迭代器,便于实现较为复杂的功能
什么是迭代器失效问题?该问题是如何产生的?怎样避免产生迭代器失效问题
迭代器指向了未定义区域
一般是容器扩容或数据修改时,前者会重新分配内存,使迭代器全部失效,后者如删除操作时,也会导致失效。
避免进行会导致迭代器失效的操作,或是使用一些方法减少失效可能性,如删除元素后令迭代器指向下一个元素。
什么是回调函数,注册回调函数,执行回调函数?(掌握std::bind用法,非常重要)
作为一个参数传给另一个函数。以便在某种情况发生时被再次调用
注册就是将一个回调函数与一个具体事件或操作关联起来的过程,告诉程序在什么条件下应该调用哪个函数。
执行就是回去调用回调函数。
bind允许绑定一个可调用的对象(如函数,函数指针,成员函数指针,lambda对象)到一组参数上,从而创建了一个新的可调用对象,可供日后调用。
std::bind可以绑定什么?bing绑定成员函数的传参有什么区别?
普通函数的参数,函数对象(重载了operator()),成员函数指针或引用,成员变量,lambda表达式
绑定类的成员函数时,需要在 std::bind
的第二个参数位置提供一个对象的引用或指针,这个对象的引用或指针会作为成员函数(第一个参数)的 this
指针使用。