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

📄 stl_list.h

📁 openRisc2000编译链接器等,用于i386 cygwin
💻 H
📖 第 1 页 / 共 3 页
字号:
       *  This function will insert copies of the data in the range [@a       *  first,@a last) into the %list before the location specified by       *  @a position.       *       *  Due to the nature of a %list this operation can be done in       *  constant time, and does not invalidate iterators and       *  references.       */      template<typename _InputIterator>        void        insert(iterator __position, _InputIterator __first,	       _InputIterator __last)        {	  // Check whether it's an integral type.  If so, it's not an iterator.	  typedef typename _Is_integer<_InputIterator>::_Integral _Integral;	  _M_insert_dispatch(__position, __first, __last, _Integral());	}      /**       *  @brief  Remove element at given position.       *  @param  position  Iterator pointing to element to be erased.       *  @return  An iterator pointing to the next element (or end()).       *       *  This function will erase the element at the given position and thus       *  shorten the %list by one.       *       *  Due to the nature of a %list this operation can be done in       *  constant time, and only invalidates iterators/references to       *  the element being removed.  The user is also cautioned that       *  this function only erases the element, and that if the element       *  is itself a pointer, the pointed-to memory is not touched in       *  any way.  Managing the pointer is the user's responsibilty.       */      iterator      erase(iterator __position);      /**       *  @brief  Remove a range of elements.       *  @param  first  Iterator pointing to the first element to be erased.       *  @param  last  Iterator pointing to one past the last element to be       *                erased.       *  @return  An iterator pointing to the element pointed to by @a last       *           prior to erasing (or end()).       *       *  This function will erase the elements in the range @a       *  [first,last) and shorten the %list accordingly.       *       *  Due to the nature of a %list this operation can be done in       *  constant time, and only invalidates iterators/references to       *  the element being removed.  The user is also cautioned that       *  this function only erases the elements, and that if the       *  elements themselves are pointers, the pointed-to memory is not       *  touched in any way.  Managing the pointer is the user's       *  responsibilty.       */      iterator      erase(iterator __first, iterator __last)      {	while (__first != __last)	  __first = erase(__first);	return __last;      }      /**       *  @brief  Swaps data with another %list.       *  @param  x  A %list of the same element and allocator types.       *       *  This exchanges the elements between two lists in constant       *  time.  Note that the global std::swap() function is       *  specialized such that std::swap(l1,l2) will feed to this       *  function.       */      void      swap(list& __x)      { _List_node_base::swap(this->_M_impl._M_node,__x._M_impl._M_node); }      /**       *  Erases all the elements.  Note that this function only erases       *  the elements, and that if the elements themselves are       *  pointers, the pointed-to memory is not touched in any way.       *  Managing the pointer is the user's responsibilty.       */      void      clear()      {        _Base::_M_clear();        _Base::_M_init();      }      // [23.2.2.4] list operations      /**       *  @brief  Insert contents of another %list.       *  @param  position  Iterator referencing the element to insert before.       *  @param  x  Source list.       *       *  The elements of @a x are inserted in constant time in front of       *  the element referenced by @a position.  @a x becomes an empty       *  list.       */      void      splice(iterator __position, list& __x)      {	if (!__x.empty())	  this->_M_transfer(__position, __x.begin(), __x.end());      }      /**       *  @brief  Insert element from another %list.       *  @param  position  Iterator referencing the element to insert before.       *  @param  x  Source list.       *  @param  i  Iterator referencing the element to move.       *       *  Removes the element in list @a x referenced by @a i and       *  inserts it into the current list before @a position.       */      void      splice(iterator __position, list&, iterator __i)      {	iterator __j = __i;	++__j;	if (__position == __i || __position == __j)	  return;	this->_M_transfer(__position, __i, __j);      }      /**       *  @brief  Insert range from another %list.       *  @param  position  Iterator referencing the element to insert before.       *  @param  x  Source list.       *  @param  first  Iterator referencing the start of range in x.       *  @param  last  Iterator referencing the end of range in x.       *       *  Removes elements in the range [first,last) and inserts them       *  before @a position in constant time.       *       *  Undefined if @a position is in [first,last).       */      void      splice(iterator __position, list&, iterator __first, iterator __last)      {	if (__first != __last)	  this->_M_transfer(__position, __first, __last);      }      /**       *  @brief  Remove all elements equal to value.       *  @param  value  The value to remove.       *       *  Removes every element in the list equal to @a value.       *  Remaining elements stay in list order.  Note that this       *  function only erases the elements, and that if the elements       *  themselves are pointers, the pointed-to memory is not       *  touched in any way.  Managing the pointer is the user's       *  responsibilty.       */      void      remove(const _Tp& __value);      /**       *  @brief  Remove all elements satisfying a predicate.       *  @param  Predicate  Unary predicate function or object.       *       *  Removes every element in the list for which the predicate       *  returns true.  Remaining elements stay in list order.  Note       *  that this function only erases the elements, and that if the       *  elements themselves are pointers, the pointed-to memory is       *  not touched in any way.  Managing the pointer is the user's       *  responsibilty.       */      template<typename _Predicate>      void      remove_if(_Predicate);      /**       *  @brief  Remove consecutive duplicate elements.       *       *  For each consecutive set of elements with the same value,       *  remove all but the first one.  Remaining elements stay in       *  list order.  Note that this function only erases the       *  elements, and that if the elements themselves are pointers,       *  the pointed-to memory is not touched in any way.  Managing       *  the pointer is the user's responsibilty.       */      void      unique();      /**       *  @brief  Remove consecutive elements satisfying a predicate.       *  @param  BinaryPredicate  Binary predicate function or object.       *       *  For each consecutive set of elements [first,last) that       *  satisfy predicate(first,i) where i is an iterator in       *  [first,last), remove all but the first one.  Remaining       *  elements stay in list order.  Note that this function only       *  erases the elements, and that if the elements themselves are       *  pointers, the pointed-to memory is not touched in any way.       *  Managing the pointer is the user's responsibilty.       */      template<typename _BinaryPredicate>        void        unique(_BinaryPredicate);      /**       *  @brief  Merge sorted lists.       *  @param  x  Sorted list to merge.       *       *  Assumes that both @a x and this list are sorted according to       *  operator<().  Merges elements of @a x into this list in       *  sorted order, leaving @a x empty when complete.  Elements in       *  this list precede elements in @a x that are equal.       */      void      merge(list& __x);      /**       *  @brief  Merge sorted lists according to comparison function.       *  @param  x  Sorted list to merge.       *  @param StrictWeakOrdering Comparison function definining       *  sort order.       *       *  Assumes that both @a x and this list are sorted according to       *  StrictWeakOrdering.  Merges elements of @a x into this list       *  in sorted order, leaving @a x empty when complete.  Elements       *  in this list precede elements in @a x that are equivalent       *  according to StrictWeakOrdering().       */      template<typename _StrictWeakOrdering>        void        merge(list&, _StrictWeakOrdering);      /**       *  @brief  Reverse the elements in list.       *       *  Reverse the order of elements in the list in linear time.       */      void      reverse()      { this->_M_impl._M_node.reverse(); }      /**       *  @brief  Sort the elements.       *       *  Sorts the elements of this list in NlogN time.  Equivalent       *  elements remain in list order.       */      void      sort();      /**       *  @brief  Sort the elements according to comparison function.       *       *  Sorts the elements of this list in NlogN time.  Equivalent       *  elements remain in list order.       */      template<typename _StrictWeakOrdering>        void        sort(_StrictWeakOrdering);    protected:      // Internal assign functions follow.      // Called by the range assign to implement [23.1.1]/9      template<typename _Integer>        void        _M_assign_dispatch(_Integer __n, _Integer __val, __true_type)        {	  _M_fill_assign(static_cast<size_type>(__n),			 static_cast<value_type>(__val));	}      // Called by the range assign to implement [23.1.1]/9      template<typename _InputIterator>        void        _M_assign_dispatch(_InputIterator __first, _InputIterator __last,			   __false_type);      // Called by assign(n,t), and the range assign when it turns out      // to be the same thing.      void      _M_fill_assign(size_type __n, const value_type& __val);      // Internal insert functions follow.      // Called by the range insert to implement [23.1.1]/9      template<typename _Integer>        void        _M_insert_dispatch(iterator __pos, _Integer __n, _Integer __x,			   __true_type)        {	  _M_fill_insert(__pos, static_cast<size_type>(__n),			 static_cast<value_type>(__x));	}      // Called by the range insert to implement [23.1.1]/9      template<typename _InputIterator>        void        _M_insert_dispatch(iterator __pos,			   _InputIterator __first, _InputIterator __last,			   __false_type)        {	  for ( ; __first != __last; ++__first)	    _M_insert(__pos, *__first);	}      // Called by insert(p,n,x), and the range insert when it turns out      // to be the same thing.      void      _M_fill_insert(iterator __pos, size_type __n, const value_type& __x)      {	for ( ; __n > 0; --__n)	  _M_insert(__pos, __x);      }      // Moves the elements from [first,last) before position.      void      _M_transfer(iterator __position, iterator __first, iterator __last)      { __position._M_node->transfer(__first._M_node,__last._M_node); }      // Inserts new element at position given and with value given.      void      _M_insert(iterator __position, const value_type& __x)      {        _Node* __tmp = _M_create_node(__x);        __tmp->hook(__position._M_node);      }      // Erases element at position given.      void      _M_erase(iterator __position)      {        __position._M_node->unhook();        _Node* __n = static_cast<_Node*>(__position._M_node);        std::_Destroy(&__n->_M_data);        _M_put_node(__n);      }    };  /**   *  @brief  List equality comparison.   *  @param  x  A %list.   *  @param  y  A %list of the same type as @a x.   *  @return  True iff the size and elements of the lists are equal.   *   *  This is an equivalence relation.  It is linear in the size of   *  the lists.  Lists are considered equivalent if their sizes are   *  equal, and if corresponding elements compare equal.  */  template<typename _Tp, typename _Alloc>    inline bool    operator==(const list<_Tp,_Alloc>& __x, const list<_Tp,_Alloc>& __y)    {      typedef typename list<_Tp,_Alloc>::const_iterator const_iterator;      const_iterator __end1 = __x.end();      const_iterator __end2 = __y.end();      const_iterator __i1 = __x.begin();      const_iterator __i2 = __y.begin();      while (__i1 != __end1 && __i2 != __end2 && *__i1 == *__i2)	{	  ++__i1;	  ++__i2;	}      return __i1 == __end1 && __i2 == __end2;    }  /**   *  @brief  List ordering relation.   *  @param  x  A %list.   *  @param  y  A %list of the same type as @a x.   *  @return  True iff @a x is lexicographically less than @a y.   *   *  This is a total ordering relation.  It is linear in the size of the   *  lists.  The elements must be comparable with @c <.   *   *  See std::lexicographical_compare() for how the determination is made.  */  template<typename _Tp, typename _Alloc>    inline bool    operator<(const list<_Tp,_Alloc>& __x, const list<_Tp,_Alloc>& __y)    { return std::lexicographical_compare(__x.begin(), __x.end(),					  __y.begin(), __y.end()); }  /// Based on operator==  template<typename _Tp, typename _Alloc>    inline bool    operator!=(const list<_Tp,_Alloc>& __x, const list<_Tp,_Alloc>& __y)    { return !(__x == __y); }  /// Based on operator<  template<typename _Tp, typename _Alloc>    inline bool    operator>(const list<_Tp,_Alloc>& __x, const list<_Tp,_Alloc>& __y)    { return __y < __x; }  /// Based on operator<  template<typename _Tp, typename _Alloc>    inline bool    operator<=(const list<_Tp,_Alloc>& __x, const list<_Tp,_Alloc>& __y)    { return !(__y < __x); }  /// Based on operator<  template<typename _Tp, typename _Alloc>    inline bool    operator>=(const list<_Tp,_Alloc>& __x, const list<_Tp,_Alloc>& __y)    { return !(__x < __y); }  /// See std::list::swap().  template<typename _Tp, typename _Alloc>    inline void    swap(list<_Tp, _Alloc>& __x, list<_Tp, _Alloc>& __y)    { __x.swap(__y); }} // namespace std#endif /* _LIST_H */

⌨️ 快捷键说明

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