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》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

GUI设计禁忌2.0

GUI设计禁忌2.0

Jeff Johnson / 盛海艳 等 / 机械工业出版社 / 2008 / 49.00元

本书描述软件开发人员在设计图形用户界面(GUI)时经常犯的“禁忌”,并提出避免这些错误的基本原则和理论依据。本书将GUI禁忌分为7种类型:GUI控件禁忌、导航禁忌、文字禁忌、图形设计和布局禁忌、交互禁忌、响应性禁忌以及管理禁忌,并分别进行详述。 本书编排独特,条理清晰,针对性极强,是不可多得的GUI设计优秀资源。本书适合软件开发人员、web站点设计人员、开发经理、用户界面设计人员等阅读。一起来看看 《GUI设计禁忌2.0》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具