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

📄 stl_vector.h

📁 俄罗斯高人Mamaich的Pocket gcc编译器(运行在PocketPC上)的全部源代码。
💻 H
📖 第 1 页 / 共 3 页
字号:
       *  Note that the assignment completely changes the %vector and       *  that the resulting %vector's size is the same as the number       *  of elements assigned.  Old data may be lost.       */      template<typename _InputIterator>        void        assign(_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_assign_dispatch(__first, __last, _Integral());	}        /// Get a copy of the memory allocation object.      allocator_type      get_allocator() const { return _Base::get_allocator(); }            // iterators      /**       *  Returns a read/write iterator that points to the first element in the       *  %vector.  Iteration is done in ordinary element order.       */      iterator      begin() { return iterator (_M_start); }            /**       *  Returns a read-only (constant) iterator that points to the       *  first element in the %vector.  Iteration is done in ordinary       *  element order.       */      const_iterator      begin() const { return const_iterator (_M_start); }            /**       *  Returns a read/write iterator that points one past the last       *  element in the %vector.  Iteration is done in ordinary       *  element order.       */      iterator      end() { return iterator (_M_finish); }            /**       *  Returns a read-only (constant) iterator that points one past the last       *  element in the %vector.  Iteration is done in ordinary element order.       */      const_iterator      end() const { return const_iterator (_M_finish); }            /**       *  Returns a read/write reverse iterator that points to the       *  last element in the %vector.  Iteration is done in reverse       *  element order.       */      reverse_iterator      rbegin() { return reverse_iterator(end()); }            /**       *  Returns a read-only (constant) reverse iterator that points       *  to the last element in the %vector.  Iteration is done in       *  reverse element order.       */      const_reverse_iterator      rbegin() const { return const_reverse_iterator(end()); }            /**       *  Returns a read/write reverse iterator that points to one before the       *  first element in the %vector.  Iteration is done in reverse element       *  order.       */      reverse_iterator      rend() { return reverse_iterator(begin()); }            /**       *  Returns a read-only (constant) reverse iterator that points       *  to one before the first element in the %vector.  Iteration       *  is done in reverse element order.       */      const_reverse_iterator      rend() const { return const_reverse_iterator(begin()); }        // [23.2.4.2] capacity      /**  Returns the number of elements in the %vector.  */      size_type      size() const { return size_type(end() - begin()); }            /**  Returns the size() of the largest possible %vector.  */      size_type      max_size() const { return size_type(-1) / sizeof(value_type); }            /**       *  @brief  Resizes the %vector to the specified number of elements.       *  @param  new_size  Number of elements the %vector should contain.       *  @param  x  Data with which new elements should be populated.       *       *  This function will %resize the %vector to the specified       *  number of elements.  If the number is smaller than the       *  %vector's current size the %vector is truncated, otherwise       *  the %vector is extended and new elements are populated with       *  given data.       */      void      resize(size_type __new_size, const value_type& __x)      {	if (__new_size < size())	  erase(begin() + __new_size, end());	else	  insert(end(), __new_size - size(), __x);      }            /**       *  @brief  Resizes the %vector to the specified number of elements.       *  @param  new_size  Number of elements the %vector should contain.       *       *  This function will resize the %vector to the specified       *  number of elements.  If the number is smaller than the       *  %vector's current size the %vector is truncated, otherwise       *  the %vector is extended and new elements are       *  default-constructed.       */      void      resize(size_type __new_size) { resize(__new_size, value_type()); }            /**       *  Returns the total number of elements that the %vector can hold before       *  needing to allocate more memory.       */      size_type      capacity() const      { return size_type(const_iterator(_M_end_of_storage) - begin()); }            /**       *  Returns true if the %vector is empty.  (Thus begin() would       *  equal end().)       */      bool      empty() const { return begin() == end(); }            /**       *  @brief  Attempt to preallocate enough memory for specified number of       *          elements.       *  @param  n  Number of elements required.       *  @throw  std::length_error  If @a n exceeds @c max_size().       *       *  This function attempts to reserve enough memory for the       *  %vector to hold the specified number of elements.  If the       *  number requested is more than max_size(), length_error is       *  thrown.       *       *  The advantage of this function is that if optimal code is a       *  necessity and the user can determine the number of elements       *  that will be required, the user can reserve the memory in       *  %advance, and thus prevent a possible reallocation of memory       *  and copying of %vector data.       */      void      reserve(size_type __n);            // element access      /**       *  @brief  Subscript access to the data contained in the %vector.       *  @param  n  The index of the element for which data should be accessed.       *  @return  Read/write reference to data.       *       *  This operator allows for easy, array-style, data access.       *  Note that data access with this operator is unchecked and       *  out_of_range lookups are not defined. (For checked lookups       *  see at().)       */      reference      operator[](size_type __n) { return *(begin() + __n); }            /**       *  @brief  Subscript access to the data contained in the %vector.       *  @param n The index of the element for which data should be       *  accessed.       *  @return  Read-only (constant) reference to data.       *       *  This operator allows for easy, array-style, data access.       *  Note that data access with this operator is unchecked and       *  out_of_range lookups are not defined. (For checked lookups       *  see at().)       */      const_reference      operator[](size_type __n) const { return *(begin() + __n); }      protected:      /// @if maint Safety check used only from at().  @endif      void      _M_range_check(size_type __n) const      {	if (__n >= this->size())	  __throw_out_of_range("vector [] access out of range");      }          public:      /**       *  @brief  Provides access to the data contained in the %vector.       *  @param n The index of the element for which data should be       *  accessed.       *  @return  Read/write reference to data.       *  @throw  std::out_of_range  If @a n is an invalid index.       *       *  This function provides for safer data access.  The parameter is first       *  checked that it is in the range of the vector.  The function throws       *  out_of_range if the check fails.       */      reference      at(size_type __n) { _M_range_check(__n); return (*this)[__n]; }            /**       *  @brief  Provides access to the data contained in the %vector.       *  @param n The index of the element for which data should be       *  accessed.       *  @return  Read-only (constant) reference to data.       *  @throw  std::out_of_range  If @a n is an invalid index.       *       *  This function provides for safer data access.  The parameter       *  is first checked that it is in the range of the vector.  The       *  function throws out_of_range if the check fails.       */      const_reference      at(size_type __n) const { _M_range_check(__n); return (*this)[__n]; }            /**       *  Returns a read/write reference to the data at the first       *  element of the %vector.       */      reference      front() { return *begin(); }            /**       *  Returns a read-only (constant) reference to the data at the first       *  element of the %vector.       */      const_reference      front() const { return *begin(); }            /**       *  Returns a read/write reference to the data at the last element of the       *  %vector.       */      reference      back() { return *(end() - 1); }            /**       *  Returns a read-only (constant) reference to the data at the last       *  element of the %vector.       */      const_reference      back() const { return *(end() - 1); }        // [23.2.4.3] modifiers      /**       *  @brief  Add data to the end of the %vector.       *  @param  x  Data to be added.       *       *  This is a typical stack operation.  The function creates an       *  element at the end of the %vector and assigns the given data       *  to it.  Due to the nature of a %vector this operation can be       *  done in constant time if the %vector has preallocated space       *  available.       */      void      push_back(const value_type& __x)      {	if (_M_finish != _M_end_of_storage)	  {	    _Construct(_M_finish, __x);	    ++_M_finish;	  }	else	  _M_insert_aux(end(), __x);      }            /**       *  @brief  Removes last element.       *       *  This is a typical stack operation. It shrinks the %vector by one.       *       *  Note that no data is returned, and if the last element's data is       *  needed, it should be retrieved before pop_back() is called.       */      void      pop_back()      {	--_M_finish;	_Destroy(_M_finish);      }            /**       *  @brief  Inserts given value into %vector before specified iterator.       *  @param  position  An iterator into the %vector.       *  @param  x  Data to be inserted.       *  @return  An iterator that points to the inserted data.       *       *  This function will insert a copy of the given value before       *  the specified location.  Note that this kind of operation       *  could be expensive for a %vector and if it is frequently       *  used the user should consider using std::list.       */      iterator      insert(iterator __position, const value_type& __x);  #ifdef _GLIBCPP_DEPRECATED      /**       *  @brief  Inserts an element into the %vector.       *  @param  position  An iterator into the %vector.       *  @return  An iterator that points to the inserted element.       *       *  This function will insert a default-constructed element       *  before the specified location.  You should consider using       *  insert(position,value_type()) instead.  Note that this kind       *  of operation could be expensive for a vector and if it is       *  frequently used the user should consider using std::list.       *       *  @note This was deprecated in 3.2 and will be removed in 3.4.       *  You must define @c _GLIBCPP_DEPRECATED to make this visible       *  in 3.2; see c++config.h.       */      iterator      insert(iterator __position)      { return insert(__position, value_type()); }#endif            /**       *  @brief  Inserts a number of copies of given data into the %vector.       *  @param  position  An iterator into the %vector.       *  @param  n  Number of elements to be inserted.       *  @param  x  Data to be inserted.       *       *  This function will insert a specified number of copies of

⌨️ 快捷键说明

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