STL源码剖析之基本算法<stl_algobase.h>

本文深入剖析STL源码,重点讨论了<stl_algobase.h>中的基本算法,包括equal用于判断元素是否相同,fill和fill_n用于设置区间元素值,以及swap和lexicographical_compare进行对象交换和序列比较。同时介绍了max和min函数,以及copy操作。
摘要由CSDN通过智能技术生成

一、equal

作用:判断[first,last)区间两个元素是否相同,第二个迭代器多出来的元素不予考虑。

template <class _InputIter1, class _InputIter2>//版本1
inline bool equal(_InputIter1 __first1, _InputIter1 __last1,
                  _InputIter2 __first2) {
  for ( ; __first1 != __last1; ++__first1, ++__first2)//遍历区间[first,last)元素
    if (*__first1 != *__first2)//只有有一个不相等返回false
      return false;
  return true;
}

template <class _InputIter1, class _InputIter2, class _BinaryPredicate>//版本2
inline bool equal(_InputIter1 __first1, _InputIter1 __last1,
                  _InputIter2 __first2, _BinaryPredicate __binary_pred) {
  for ( ; __first1 != __last1; ++__first1, ++__first2)
    if (!__binary_pred(*__first1, *__first2))//两个元素执行二元操作符
      return false;
  return true;
}

二、fill

作用:将指定区间元素改为新值

template <class _ForwardIter, class _Tp>
void fill(_ForwardIter __first, _ForwardIter __last, const _Tp& __value) {
  for ( ; __first != __last; ++__first)//遍历整个区间
    *__first = __value;//指定新值
}

三、fill_n

作用:将指定区间前n个元素改为新值

template <class _OutputIter, class _Size, class _Tp>
_OutputIter fill_n(_OutputIter __first, _Size __n, const _Tp& __value) {
  for ( ; __n > 0; --__n, ++__first)
    *__first = __value;
  return __first;
}
问题:如果n大于元素区间个数?采用inserter()修改:

int a[3] = {0,1,2};
vector<int> iv (a,a+3);//0,1,2
fill_n(inserter(iv,iv.begin()),5,1);//1,1,1,1,1,0,1,2
四、iter_swap

作用:将两个迭代器所指对象调换。

template <class _ForwardIter1, class _ForwardIter2, class _Tp>
inline void __iter_swap(_ForwardIter1 __a, _ForwardIter2 __b, _Tp*) {
  _Tp __tmp = *__a;
  *__a = *__b;
  *__b = __tmp;
}

template <class _ForwardIter1, class _ForwardIter2>
inline void iter_swap(_ForwardIter1 __a, _ForwardIter2 __b) {
  __iter_swap(__a, __b, __VALUE_TYPE(__a));
}
五、lexicographical_compare

作用:以字典排序方式对两个序列进行比较,第一个元素小于第二个元素返回true。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值