_string.h

来自「stl的源码」· C头文件 代码 · 共 829 行 · 第 1/3 页

H
829
字号
  }  _Self& append(const _Self& __s, size_type __pos, size_type __n) {    size_type __old_capacity = capacity();    _M_non_dbg_impl.append(__s._M_non_dbg_impl, __pos, __n);    _Compare_Capacity(__old_capacity);    return *this;  }  _Self& append(const _CharT* __s, size_type __n) {    _STLP_FIX_LITERAL_BUG(__s)    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)    size_type __old_capacity = capacity();    _M_non_dbg_impl.append(__s, __n);    _Compare_Capacity(__old_capacity);    return *this;  }  _Self& append(const _CharT* __s) {    _STLP_FIX_LITERAL_BUG(__s)    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)    size_type __old_capacity = capacity();    _M_non_dbg_impl.append(__s);    _Compare_Capacity(__old_capacity);    return *this;  }  _Self& append(size_type __n, _CharT __c) {    size_type __old_capacity = this->capacity();    _M_non_dbg_impl.append(__n, __c);    _Compare_Capacity(__old_capacity);    return *this;  }  void push_back(_CharT __c) {    size_type __old_capacity = this->capacity();    _M_non_dbg_impl.push_back(__c);    _Compare_Capacity(__old_capacity);  }  void pop_back() {    _Invalidate_iterator(this->end());    _M_non_dbg_impl.pop_back();  }  // Assign  _Self& assign(const _Self& __s) {    _Invalidate_all();    _M_non_dbg_impl.assign(__s._M_non_dbg_impl);    return *this;  }  _Self& assign(const _Self& __s, size_type __pos, size_type __n) {    if (__pos < __s.size()) {      _Invalidate_all();    }    _M_non_dbg_impl.assign(__s._M_non_dbg_impl, __pos, __n);    return *this;  }  _Self& assign(const _CharT* __s, size_type __n) {    _STLP_FIX_LITERAL_BUG(__s)    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)    _Invalidate_all();    _M_non_dbg_impl.assign(__s, __s + __n);    return *this;  }  _Self& assign(const _CharT* __s) {    _STLP_FIX_LITERAL_BUG(__s)    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)    _Invalidate_all();    _M_non_dbg_impl.assign(__s);    return *this;  }  _Self& assign(size_type __n, _CharT __c) {    _Invalidate_all();    _M_non_dbg_impl.assign(__n, __c);    return *this;  }#if defined(_STLP_MEMBER_TEMPLATES)  template <class _InputIter>  inline _Self& assign(_InputIter __first, _InputIter __last) {    _STLP_FIX_LITERAL_BUG(__first) _STLP_FIX_LITERAL_BUG(__last)    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last))    _Invalidate_all();    _M_non_dbg_impl.assign(_STLP_PRIV _Non_Dbg_iter(__first), _STLP_PRIV _Non_Dbg_iter(__last));    return *this;  }#endif#if !defined (_STLP_MEMBER_TEMPLATES) || \    !defined (_STLP_NO_METHOD_SPECIALIZATION) && !defined (_STLP_NO_EXTENSIONS)  _Self& assign(const _CharT* __f, const _CharT* __l) {    _STLP_FIX_LITERAL_BUG(__f) _STLP_FIX_LITERAL_BUG(__l)    _STLP_DEBUG_CHECK(_STLP_PRIV __check_ptr_range(__f, __l))    _Invalidate_all();    _M_non_dbg_impl.assign(__f, __l);    return *this;  }  _Self& assign(const_iterator __f, const_iterator __l) {    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__f, __l))    _Invalidate_all();    _M_non_dbg_impl.assign(__f._M_iterator, __l._M_iterator);    return *this;  }#endif  // Insert  _Self& insert(size_type __pos, const _Self& __s) {    size_type __old_capacity = capacity();    _M_non_dbg_impl.insert(__pos, __s._M_non_dbg_impl);    _Compare_Capacity(__old_capacity);    return *this;  }  _Self& insert(size_type __pos, const _Self& __s,                size_type __beg, size_type __n) {    size_type __old_capacity = capacity();    _M_non_dbg_impl.insert(__pos, __s._M_non_dbg_impl, __beg, __n);    _Compare_Capacity(__old_capacity);    return *this;  }  _Self& insert(size_type __pos, const _CharT* __s, size_type __n) {    _STLP_FIX_LITERAL_BUG(__s)    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)    size_type __old_capacity = capacity();    _M_non_dbg_impl.insert(__pos, __s, __n);    _Compare_Capacity(__old_capacity);    return *this;  }  _Self& insert(size_type __pos, const _CharT* __s) {    _STLP_FIX_LITERAL_BUG(__s)    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)    return insert(__pos, __s, _Traits::length(__s));  }  _Self& insert(size_type __pos, size_type __n, _CharT __c) {    size_type __old_capacity = capacity();    _M_non_dbg_impl.insert(__pos, __n, __c);    _Compare_Capacity(__old_capacity);    return *this;  }  iterator insert(iterator __p, _CharT __c) {    _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list,__p))    size_type __old_capacity = capacity();    typename _Base::iterator __ret = _M_non_dbg_impl.insert(__p._M_iterator, __c);    _Compare_Capacity(__old_capacity);    return iterator(&_M_iter_list, __ret);  }  void insert(iterator __p, size_t __n, _CharT __c) {    _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list,__p))    size_type __old_capacity = capacity();    _M_non_dbg_impl.insert(__p._M_iterator, __n, __c);    _Compare_Capacity(__old_capacity);  }#if defined (_STLP_MEMBER_TEMPLATES)  template <class _InputIter>  void insert(iterator __p, _InputIter __first, _InputIter __last) {    _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list,__p))    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first,__last))    size_type __old_capacity = this->capacity();    _M_non_dbg_impl.insert(__p._M_iterator,                           _STLP_PRIV _Non_Dbg_iter(__first), _STLP_PRIV _Non_Dbg_iter(__last));    _Compare_Capacity(__old_capacity);  }#endif#if !defined (_STLP_MEMBER_TEMPLATES)  void insert(iterator __p, const _CharT* __f, const _CharT* __l) {    _STLP_FIX_LITERAL_BUG(__f)_STLP_FIX_LITERAL_BUG(__l)    _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list,__p))    _STLP_DEBUG_CHECK(_STLP_PRIV __check_ptr_range(__f,__l))    size_type __old_capacity = capacity();    _M_non_dbg_impl.insert(__p._M_iterator, __f, __l);    _Compare_Capacity(__old_capacity);  }#endif#if !defined (_STLP_MEMBER_TEMPLATES) || !defined (_STLP_NO_METHOD_SPECIALIZATION)  // Those overloads are necessary to check self referencing correctly in non debug  // basic_string implementation  void insert(iterator __p, const_iterator __f, const_iterator __l) {    _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list,__p))    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__f,__l))#  if (_STLP_DEBUG_LEVEL == _STLP_STANDARD_DBG_LEVEL)    _STLP_STD_DEBUG_CHECK(__check_if_not_owner(&_M_iter_list, __f))#  endif    size_type __old_capacity = capacity();    _M_non_dbg_impl.insert(__p._M_iterator, __f._M_iterator, __l._M_iterator);    _Compare_Capacity(__old_capacity);  }  void insert(iterator __p, iterator __f, iterator __l) {    _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list,__p))    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__f,__l))#  if (_STLP_DEBUG_LEVEL == _STLP_STANDARD_DBG_LEVEL)    _STLP_STD_DEBUG_CHECK(__check_if_not_owner(&_M_iter_list, __f))#  endif    size_type __old_capacity = capacity();    _M_non_dbg_impl.insert(__p._M_iterator, __f._M_iterator, __l._M_iterator);    _Compare_Capacity(__old_capacity);  }#endif  // Erase.  _Self& erase(size_type __pos = 0, size_type __n = npos) {    if (__pos < size()) {      _Invalidate_iterators(begin() + __pos, end());    }    _M_non_dbg_impl.erase(__pos, __n);    return *this;  }  iterator erase(iterator __pos) {    _STLP_DEBUG_CHECK(_STLP_PRIV _Dereferenceable(__pos))    _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list,__pos))    _Invalidate_iterators(__pos, end());    return iterator(&_M_iter_list, _M_non_dbg_impl.erase(__pos._M_iterator));  }  iterator erase(iterator __f, iterator __l) {    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__f, __l, begin(), end()))    _Invalidate_iterators(__f, end());    return iterator(&_M_iter_list, _M_non_dbg_impl.erase(__f._M_iterator, __l._M_iterator));  }  // Substring.  _Self substr(size_type __pos = 0, size_type __n = npos) const  { return _M_non_dbg_impl.substr(__pos, __n); }  // Replace.  (Conceptually equivalent to erase followed by insert.)  _Self& replace(size_type __pos, size_type __n, const _Self& __s) {    size_type __old_capacity = capacity();    _M_non_dbg_impl.replace(__pos, __n, __s._M_non_dbg_impl);    _Compare_Capacity(__old_capacity);    return *this;  }  _Self& replace(size_type __pos1, size_type __n1, const _Self& __s,                 size_type __pos2, size_type __n2) {    size_type __old_capacity = capacity();    _M_non_dbg_impl.replace(__pos1, __n1, __s._M_non_dbg_impl, __pos2, __n2);    _Compare_Capacity(__old_capacity);    return *this;  }  _Self& replace(size_type __pos, size_type __n1, const _CharT* __s, size_type __n2) {    _STLP_FIX_LITERAL_BUG(__s)    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)    size_type __old_capacity = capacity();    _M_non_dbg_impl.replace(__pos, __n1, __s, __n2);    _Compare_Capacity(__old_capacity);    return *this;  }  _Self& replace(size_type __pos, size_type __n1, const _CharT* __s) {    _STLP_FIX_LITERAL_BUG(__s)    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)    size_type __old_capacity = capacity();    _M_non_dbg_impl.replace(__pos, __n1, __s);    _Compare_Capacity(__old_capacity);    return *this;  }  _Self& replace(size_type __pos, size_type __n1, size_type __n2, _CharT __c) {    size_type __old_capacity = capacity();    _M_non_dbg_impl.replace(__pos, __n1, __n2, __c);    _Compare_Capacity(__old_capacity);    return *this;  }

⌨️ 快捷键说明

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