C++ STL algo base

栏目: 编程工具 · 发布时间: 6年前

内容简介:函数列表:交换两个迭代器,主要是依赖迭代器要实现赋值构造函数。其中

简介

函数列表:

  • swap related
    iter_swap
    swap
    
  • comparison related:
    min
    max
    mismatch
    equal
    lexicographical_compare/_3way
    
  • copy and fill related
    copy
    copy_backward
    copy_n
    fill
    fill_n
    

算法合集

swap related

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));
}

其中 __VALUE_TYPE 是个宏,本质是调用 type_traits 来获取对应的 ::value_type .

swap

交换两个数

template <class _Tp>
inline void swap(_Tp& __a, _Tp& __b) {
  _Tp __tmp = __a;
  __a = __b;
  __b = __tmp;
}

这两个 swap 的区别就是交换的类型不一样, iter_swap 我们期望是交换类似指针的输入,交换的是指针 背后的值,而不是指针本身的值。

comparison related

min & max

比较两个值的大小,支持传入第三个参数作为比较函数。

mismatch

mismatch(Iter first1, Iter last1, Iter first2) ,返回值是一个 pair<Iter, Iter>(first1, first2) 。 其实现就分别递进两个迭代器,直到停止出现,或者不相等出现。期望的是 first2 指向的集合比 first1 指向的集合长

template <class _InputIter1, class _InputIter2>
pair<_InputIter1, _InputIter2> mismatch(_InputIter1 __first1,
                                        _InputIter1 __last1,
                                        _InputIter2 __first2) {
  while (__first1 != __last1 && *__first1 == *__first2) {
    ++__first1;
    ++__first2;
  }
  return pair<_InputIter1, _InputIter2>(__first1, __first2);
}

支持第4个参数传入比较函数。

equal

比较两个序列是否相等,同样是期望序列 __first2 指向的序列比 __first1 指向的序列长。

template <class _InputIter1, class _InputIter2>
inline bool equal(_InputIter1 __first1, _InputIter1 __last1,
                  _InputIter2 __first2) {
  for ( ; __first1 != __last1; ++__first1, ++__first2)
    if (*__first1 != *__first2)
      return false;
  return true;
}

支持第4个参数传入比较函数。

lexicographical_compare

使用 < 比较迭代器的值

lexicographical_compare(Iter first1, Iter last1, Iter first2, Iter last2) 。支持再传入一个参数 作为比较函数。

lexicographical_compare_3way

这个带 3way 会额外跳过相等的元素。

  • 小于:返回 -1
  • 等于:返回 0
  • 大于:返回 1

copy and fill related

复制的实现有 trivial 的实现,直接使用 memcpynon-trivial 的实现考虑到了不动 iterator 。对于 ForwardIterator 按部就班移动即可,对于 RandomAccessIterator 则会计算距离差,然后通过移动整数来 作为判断条件。

copy(Iter first, Iter last, Iter result)
copy_n(Iter first, size_type cnt, Iter result)
fill(Iter first, Iter last, _Tp val)
fill_n(Iter first, size_type n, _Tp val)

本文完

C++ STL algo base

This work is licensed under a CC A-S 4.0 International License

.


以上所述就是小编给大家介绍的《C++ STL algo base》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

刘强东自述

刘强东自述

刘强东 / 中信出版集团 / 2016-6-1 / 49.00

京东 1998年,京东还只是中关村一个经营光磁生意的小柜台,月营业额仅有几万元,如今则已经成长为中国营收规模超大的互联网企业,2015年全年营收1813亿,总交易额达到4627亿元; 为解决电商“最后一公里”的痛点,创立并自建B2C物流模式; 经常被争议,却始终坚持“不挣快钱”,选择上市不是因为“缺钱”,只为让合作伙伴睡得着觉,为用户和社会创造价值,由此成就让整个华尔街一片京东红......一起来看看 《刘强东自述》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具