C++复习06(算法、迭代器、适配器、仿函数、一级空间适配器实现)

算法

如何衡量一个算法的好坏:时间复杂度+空间复杂度。

算法:问题的求解步骤,以有限的步骤,解决数学或逻辑中的问题。STL中的算法主要分为两大类:与数据结构相关算法(容器中的成员函数)和通用算法(与数据结构不相干)。
STL中通用算法总共有70多个,主要包含:
排序,查找,排列组合,数据移动,拷贝,删除,比较组合,运算等。

什么是通用类型算法:

通用算法本身不会执行容器的操作,它们只会运行于迭代器之上,执行迭代器的操作。

  • 算法永远不会改变底层容器的大小。
  • 算法可能改变容器中保存的元素的值,也可能在容器内移动元素,但永远不会直接添加或删除元素

以find算法(找元素在区间中第一次出现的位置)为例:

// 在[first, last)中查找value第一次出现的位置,找到返回该元素的位置,否则返回last
// 时间复杂度O(N)
template<class InputIterator, class T>
InputIterator find ( InputIterator first, InputIterator last, const T& value )
{
for ( ;first!=last; first++) if ( *first==value ) break;
return first;
}

// 在[first, last)中查找满足pred条件的元素第一次出现的位置,找到返回该位置,否则返回last
// 时间复杂度O(N)
template<class InputIterator, class Predicate>
InputIterator find_if ( InputIterator first, InputIterator last, Predicate pred )
{
for ( ; first!=last ; first++ ) if ( pred(*first) ) break;
return first;
}

find通用算法:vector、list、deque。
map、unordered_map不会使用find算法进行查找,自己包含有自己的find算法。map使用二叉树算法、unordered_map使用哈希算法。

迭代器

1.迭代器是一种设计模式。

2.作用:
让用户通过特定的接口访问容器的数据,不需要了解容器内部的底层数据结构。

3.分类:

  • 正向迭代器:普通迭代器 const类型迭代器
  • 反向迭代器(对正向迭代器的适配):普通迭代器 const类型迭代器

4.迭代器本质:
实际上是对指针进行的封装。除vector外,vector的迭代器实际就是原生态指针的别名。

5.迭代器由谁

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值