⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stl_function.h

📁 stl的源代码3.13版
💻 H
📖 第 1 页 / 共 2 页
字号:
/* * * Copyright (c) 1994 * Hewlett-Packard Company * * Permission to use, copy, modify, distribute and sell this software * and its documentation for any purpose is hereby granted without fee, * provided that the above copyright notice appear in all copies and * that both that copyright notice and this permission notice appear * in supporting documentation.  Hewlett-Packard Company makes no * representations about the suitability of this software for any * purpose.  It is provided "as is" without express or implied warranty. * * * Copyright (c) 1996-1998 * Silicon Graphics Computer Systems, Inc. * * Permission to use, copy, modify, distribute and sell this software * and its documentation for any purpose is hereby granted without fee, * provided that the above copyright notice appear in all copies and * that both that copyright notice and this permission notice appear * in supporting documentation.  Silicon Graphics makes no * representations about the suitability of this software for any * purpose.  It is provided "as is" without express or implied warranty. *//* NOTE: This is an internal header file, included by other STL headers. *   You should not attempt to use it directly. */#ifndef __SGI_STL_INTERNAL_FUNCTION_H#define __SGI_STL_INTERNAL_FUNCTION_H__STL_BEGIN_NAMESPACEtemplate <class _Arg, class _Result>struct unary_function {  typedef _Arg argument_type;  typedef _Result result_type;};template <class _Arg1, class _Arg2, class _Result>struct binary_function {  typedef _Arg1 first_argument_type;  typedef _Arg2 second_argument_type;  typedef _Result result_type;};      template <class _Tp>struct plus : public binary_function<_Tp,_Tp,_Tp> {  _Tp operator()(const _Tp& __x, const _Tp& __y) const { return __x + __y; }};template <class _Tp>struct minus : public binary_function<_Tp,_Tp,_Tp> {  _Tp operator()(const _Tp& __x, const _Tp& __y) const { return __x - __y; }};template <class _Tp>struct multiplies : public binary_function<_Tp,_Tp,_Tp> {  _Tp operator()(const _Tp& __x, const _Tp& __y) const { return __x * __y; }};template <class _Tp>struct divides : public binary_function<_Tp,_Tp,_Tp> {  _Tp operator()(const _Tp& __x, const _Tp& __y) const { return __x / __y; }};// identity_element (not part of the C++ standard).template <class _Tp> inline _Tp identity_element(plus<_Tp>) {  return _Tp(0);}template <class _Tp> inline _Tp identity_element(multiplies<_Tp>) {  return _Tp(1);}template <class _Tp>struct modulus : public binary_function<_Tp,_Tp,_Tp> {  _Tp operator()(const _Tp& __x, const _Tp& __y) const { return __x % __y; }};template <class _Tp>struct negate : public unary_function<_Tp,_Tp> {  _Tp operator()(const _Tp& __x) const { return -__x; }};template <class _Tp>struct equal_to : public binary_function<_Tp,_Tp,bool> {  bool operator()(const _Tp& __x, const _Tp& __y) const { return __x == __y; }};template <class _Tp>struct not_equal_to : public binary_function<_Tp,_Tp,bool> {  bool operator()(const _Tp& __x, const _Tp& __y) const { return __x != __y; }};template <class _Tp>struct greater : public binary_function<_Tp,_Tp,bool> {  bool operator()(const _Tp& __x, const _Tp& __y) const { return __x > __y; }};template <class _Tp>struct less : public binary_function<_Tp,_Tp,bool> {  bool operator()(const _Tp& __x, const _Tp& __y) const { return __x < __y; }};template <class _Tp>struct greater_equal : public binary_function<_Tp,_Tp,bool>{  bool operator()(const _Tp& __x, const _Tp& __y) const { return __x >= __y; }};template <class _Tp>struct less_equal : public binary_function<_Tp,_Tp,bool> {  bool operator()(const _Tp& __x, const _Tp& __y) const { return __x <= __y; }};template <class _Tp>struct logical_and : public binary_function<_Tp,_Tp,bool>{  bool operator()(const _Tp& __x, const _Tp& __y) const { return __x && __y; }};template <class _Tp>struct logical_or : public binary_function<_Tp,_Tp,bool>{  bool operator()(const _Tp& __x, const _Tp& __y) const { return __x || __y; }};template <class _Tp>struct logical_not : public unary_function<_Tp,bool>{  bool operator()(const _Tp& __x) const { return !__x; }};template <class _Predicate>class unary_negate  : public unary_function<typename _Predicate::argument_type, bool> {protected:  _Predicate _M_pred;public:  explicit unary_negate(const _Predicate& __x) : _M_pred(__x) {}  bool operator()(const typename _Predicate::argument_type& __x) const {    return !_M_pred(__x);  }};template <class _Predicate>inline unary_negate<_Predicate> not1(const _Predicate& __pred){  return unary_negate<_Predicate>(__pred);}template <class _Predicate> class binary_negate   : public binary_function<typename _Predicate::first_argument_type,                           typename _Predicate::second_argument_type,                           bool> {protected:  _Predicate _M_pred;public:  explicit binary_negate(const _Predicate& __x) : _M_pred(__x) {}  bool operator()(const typename _Predicate::first_argument_type& __x,                   const typename _Predicate::second_argument_type& __y) const  {    return !_M_pred(__x, __y);   }};template <class _Predicate>inline binary_negate<_Predicate> not2(const _Predicate& __pred){  return binary_negate<_Predicate>(__pred);}template <class _Operation> class binder1st  : public unary_function<typename _Operation::second_argument_type,                          typename _Operation::result_type> {protected:  _Operation op;  typename _Operation::first_argument_type value;public:  binder1st(const _Operation& __x,            const typename _Operation::first_argument_type& __y)      : op(__x), value(__y) {}  typename _Operation::result_type  operator()(const typename _Operation::second_argument_type& __x) const {    return op(value, __x);   }};template <class _Operation, class _Tp>inline binder1st<_Operation> bind1st(const _Operation& __fn, const _Tp& __x) {  typedef typename _Operation::first_argument_type _Arg1_type;  return binder1st<_Operation>(__fn, _Arg1_type(__x));}template <class _Operation> class binder2nd  : public unary_function<typename _Operation::first_argument_type,                          typename _Operation::result_type> {protected:  _Operation op;  typename _Operation::second_argument_type value;public:  binder2nd(const _Operation& __x,            const typename _Operation::second_argument_type& __y)       : op(__x), value(__y) {}  typename _Operation::result_type  operator()(const typename _Operation::first_argument_type& __x) const {    return op(__x, value);   }};template <class _Operation, class _Tp>inline binder2nd<_Operation> bind2nd(const _Operation& __fn, const _Tp& __x) {  typedef typename _Operation::second_argument_type _Arg2_type;  return binder2nd<_Operation>(__fn, _Arg2_type(__x));}// unary_compose and binary_compose (extensions, not part of the standard).template <class _Operation1, class _Operation2>class unary_compose  : public unary_function<typename _Operation2::argument_type,                          typename _Operation1::result_type> {protected:  _Operation1 _M_fn1;  _Operation2 _M_fn2;public:  unary_compose(const _Operation1& __x, const _Operation2& __y)     : _M_fn1(__x), _M_fn2(__y) {}  typename _Operation1::result_type  operator()(const typename _Operation2::argument_type& __x) const {    return _M_fn1(_M_fn2(__x));  }};template <class _Operation1, class _Operation2>inline unary_compose<_Operation1,_Operation2> compose1(const _Operation1& __fn1, const _Operation2& __fn2){  return unary_compose<_Operation1,_Operation2>(__fn1, __fn2);}template <class _Operation1, class _Operation2, class _Operation3>class binary_compose  : public unary_function<typename _Operation2::argument_type,                          typename _Operation1::result_type> {protected:  _Operation1 _M_fn1;  _Operation2 _M_fn2;  _Operation3 _M_fn3;public:  binary_compose(const _Operation1& __x, const _Operation2& __y,                  const _Operation3& __z)     : _M_fn1(__x), _M_fn2(__y), _M_fn3(__z) { }  typename _Operation1::result_type  operator()(const typename _Operation2::argument_type& __x) const {    return _M_fn1(_M_fn2(__x), _M_fn3(__x));  }};template <class _Operation1, class _Operation2, class _Operation3>inline binary_compose<_Operation1, _Operation2, _Operation3> compose2(const _Operation1& __fn1, const _Operation2& __fn2,          const _Operation3& __fn3){  return binary_compose<_Operation1,_Operation2,_Operation3>    (__fn1, __fn2, __fn3);}template <class _Arg, class _Result>class pointer_to_unary_function : public unary_function<_Arg, _Result> {protected:  _Result (*_M_ptr)(_Arg);public:  pointer_to_unary_function() {}  explicit pointer_to_unary_function(_Result (*__x)(_Arg)) : _M_ptr(__x) {}  _Result operator()(_Arg __x) const { return _M_ptr(__x); }};template <class _Arg, class _Result>inline pointer_to_unary_function<_Arg, _Result> ptr_fun(_Result (*__x)(_Arg)){  return pointer_to_unary_function<_Arg, _Result>(__x);}template <class _Arg1, class _Arg2, class _Result>class pointer_to_binary_function :   public binary_function<_Arg1,_Arg2,_Result> {protected:    _Result (*_M_ptr)(_Arg1, _Arg2);public:    pointer_to_binary_function() {}    explicit pointer_to_binary_function(_Result (*__x)(_Arg1, _Arg2))       : _M_ptr(__x) {}    _Result operator()(_Arg1 __x, _Arg2 __y) const {      return _M_ptr(__x, __y);    }};template <class _Arg1, class _Arg2, class _Result>inline pointer_to_binary_function<_Arg1,_Arg2,_Result> ptr_fun(_Result (*__x)(_Arg1, _Arg2)) {  return pointer_to_binary_function<_Arg1,_Arg2,_Result>(__x);}// identity is an extensions: it is not part of the standard.template <class _Tp>struct _Identity : public unary_function<_Tp,_Tp> {  const _Tp& operator()(const _Tp& __x) const { return __x; }};template <class _Tp> struct identity : public _Identity<_Tp> {};// select1st and select2nd are extensions: they are not part of the standard.template <class _Pair>struct _Select1st : public unary_function<_Pair, typename _Pair::first_type> {  const typename _Pair::first_type& operator()(const _Pair& __x) const {    return __x.first;  }};template <class _Pair>struct _Select2nd : public unary_function<_Pair, typename _Pair::second_type>{  const typename _Pair::second_type& operator()(const _Pair& __x) const {    return __x.second;  }};template <class _Pair> struct select1st : public _Select1st<_Pair> {};template <class _Pair> struct select2nd : public _Select2nd<_Pair> {};// project1st and project2nd are extensions: they are not part of the standardtemplate <class _Arg1, class _Arg2>struct _Project1st : public binary_function<_Arg1, _Arg2, _Arg1> {  _Arg1 operator()(const _Arg1& __x, const _Arg2&) const { return __x; }};template <class _Arg1, class _Arg2>struct _Project2nd : public binary_function<_Arg1, _Arg2, _Arg2> {  _Arg2 operator()(const _Arg1&, const _Arg2& __y) const { return __y; }};template <class _Arg1, class _Arg2> 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -