basic_string.h

来自「symbian上STL模板库的实现」· C头文件 代码 · 共 1,380 行 · 第 1/5 页

H
1,380
字号
                 *  @return  Reference to this string.                 *  @throw  std::out_of_range  If @a pos1 > size() or @a pos2 >                 *  str.size().                 *  @throw  std::length_error  If new length exceeds @c max_size().                 *                 *  Removes the characters in the range [pos1,pos1 + n) from this                 *  string.  In place, the value of @a str is inserted.  If @a pos is                 *  beyond end of string, out_of_range is thrown.  If the length of the                 *  result exceeds max_size(), length_error is thrown.  The value of the                 *  string doesn't change if an error is thrown.                 */                basic_string&                    replace(size_type __pos1, size_type __n1, const basic_string& __str,                            size_type __pos2, size_type __n2)                    { return this->replace(__pos1, __n1, __str._M_data()                            + __str._M_check(__pos2, "basic_string::replace"),                            __str._M_limit(__pos2, __n2)); }                /**                 *  @brief  Replace characters with value of a C substring.                 *  @param pos  Index of first character to replace.                 *  @param n1  Number of characters to be replaced.                 *  @param str  C string to insert.                 *  @param n2  Number of characters from str to use.                 *  @return  Reference to this string.                 *  @throw  std::out_of_range  If @a pos1 > size().                 *  @throw  std::length_error  If new length exceeds @c max_size().                 *                 *  Removes the characters in the range [pos,pos + n1) from this string.                 *  In place, the first @a n2 characters of @a str are inserted, or all                 *  of @a str if @a n2 is too large.  If @a pos is beyond end of string,                 *  out_of_range is thrown.  If the length of result exceeds max_size(),                 *  length_error is thrown.  The value of the string doesn't change if                 *  an error is thrown.                 */                basic_string&                    replace(size_type __pos, size_type __n1, const _CharT* __s,                            size_type __n2);                /**                 *  @brief  Replace characters with value of a C string.                 *  @param pos  Index of first character to replace.                 *  @param n1  Number of characters to be replaced.                 *  @param str  C string to insert.                 *  @return  Reference to this string.                 *  @throw  std::out_of_range  If @a pos > size().                 *  @throw  std::length_error  If new length exceeds @c max_size().                 *                 *  Removes the characters in the range [pos,pos + n1) from this string.                 *  In place, the first @a n characters of @a str are inserted.  If @a                 *  pos is beyond end of string, out_of_range is thrown.  If the length                 *  of result exceeds max_size(), length_error is thrown.  The value of                 *  the string doesn't change if an error is thrown.                 */                basic_string&                    replace(size_type __pos, size_type __n1, const _CharT* __s)                    {                        __glibcxx_requires_string(__s);                        return this->replace(__pos, __n1, __s, traits_type::length(__s));                    }                /**                 *  @brief  Replace characters with multiple characters.                 *  @param pos  Index of first character to replace.                 *  @param n1  Number of characters to be replaced.                 *  @param n2  Number of characters to insert.                 *  @param c  Character to insert.                 *  @return  Reference to this string.                 *  @throw  std::out_of_range  If @a pos > size().                 *  @throw  std::length_error  If new length exceeds @c max_size().                 *                 *  Removes the characters in the range [pos,pos + n1) from this string.                 *  In place, @a n2 copies of @a c are inserted.  If @a pos is beyond                 *  end of string, out_of_range is thrown.  If the length of result                 *  exceeds max_size(), length_error is thrown.  The value of the string                 *  doesn't change if an error is thrown.                 */                basic_string&                    replace(size_type __pos, size_type __n1, size_type __n2, _CharT __c)                    { return _M_replace_aux(_M_check(__pos, "basic_string::replace"),                            _M_limit(__pos, __n1), __n2, __c); }                /**                 *  @brief  Replace range of characters with string.                 *  @param i1  Iterator referencing start of range to replace.                 *  @param i2  Iterator referencing end of range to replace.                 *  @param str  String value to insert.                 *  @return  Reference to this string.                 *  @throw  std::length_error  If new length exceeds @c max_size().                 *                 *  Removes the characters in the range [i1,i2).  In place, the value of                 *  @a str is inserted.  If the length of result exceeds max_size(),                 *  length_error is thrown.  The value of the string doesn't change if                 *  an error is thrown.                 */                basic_string&                    replace(iterator __i1, iterator __i2, const basic_string& __str)                    { return this->replace(__i1, __i2, __str._M_data(), __str.size()); }                /**                 *  @brief  Replace range of characters with C substring.                 *  @param i1  Iterator referencing start of range to replace.                 *  @param i2  Iterator referencing end of range to replace.                 *  @param s  C string value to insert.                 *  @param n  Number of characters from s to insert.                 *  @return  Reference to this string.                 *  @throw  std::length_error  If new length exceeds @c max_size().                 *                 *  Removes the characters in the range [i1,i2).  In place, the first @a                 *  n characters of @a s are inserted.  If the length of result exceeds                 *  max_size(), length_error is thrown.  The value of the string doesn't                 *  change if an error is thrown.                 */                basic_string&                    replace(iterator __i1, iterator __i2, const _CharT* __s, size_type __n)                    {                        _GLIBCXX_DEBUG_PEDASSERT(_M_ibegin() <= __i1 && __i1 <= __i2                                && __i2 <= _M_iend());                        return this->replace(__i1 - _M_ibegin(), __i2 - __i1, __s, __n);                    }                /**                 *  @brief  Replace range of characters with C string.                 *  @param i1  Iterator referencing start of range to replace.                 *  @param i2  Iterator referencing end of range to replace.                 *  @param s  C string value to insert.                 *  @return  Reference to this string.                 *  @throw  std::length_error  If new length exceeds @c max_size().                 *                 *  Removes the characters in the range [i1,i2).  In place, the                 *  characters of @a s are inserted.  If the length of result exceeds                 *  max_size(), length_error is thrown.  The value of the string doesn't                 *  change if an error is thrown.                 */                basic_string&                    replace(iterator __i1, iterator __i2, const _CharT* __s)                    {                        __glibcxx_requires_string(__s);                        return this->replace(__i1, __i2, __s, traits_type::length(__s));                    }                /**                 *  @brief  Replace range of characters with multiple characters                 *  @param i1  Iterator referencing start of range to replace.                 *  @param i2  Iterator referencing end of range to replace.                 *  @param n  Number of characters to insert.                 *  @param c  Character to insert.                 *  @return  Reference to this string.                 *  @throw  std::length_error  If new length exceeds @c max_size().                 *                 *  Removes the characters in the range [i1,i2).  In place, @a n copies                 *  of @a c are inserted.  If the length of result exceeds max_size(),                 *  length_error is thrown.  The value of the string doesn't change if                 *  an error is thrown.                 */                basic_string&                    replace(iterator __i1, iterator __i2, size_type __n, _CharT __c)                    {                        _GLIBCXX_DEBUG_PEDASSERT(_M_ibegin() <= __i1 && __i1 <= __i2                                && __i2 <= _M_iend());                        return _M_replace_aux(__i1 - _M_ibegin(), __i2 - __i1, __n, __c);                    }                /**                 *  @brief  Replace range of characters with range.                 *  @param i1  Iterator referencing start of range to replace.                 *  @param i2  Iterator referencing end of range to replace.                 *  @param k1  Iterator referencing start of range to insert.                 *  @param k2  Iterator referencing end of range to insert.                 *  @return  Reference to this string.                 *  @throw  std::length_error  If new length exceeds @c max_size().                 *                 *  Removes the characters in the range [i1,i2).  In place, characters                 *  in the range [k1,k2) are inserted.  If the length of result exceeds                 *  max_size(), length_error is thrown.  The value of the string doesn't                 *  change if an error is thrown.                 */                template<class _InputIterator>                    basic_string&                    replace(iterator __i1, iterator __i2,                            _InputIterator __k1, _InputIterator __k2)                    {                        _GLIBCXX_DEBUG_PEDASSERT(_M_ibegin() <= __i1 && __i1 <= __i2                                && __i2 <= _M_iend());                        __glibcxx_requires_valid_range(__k1, __k2);                        typedef typename _Is_integer<_InputIterator>::_Integral _Integral;                        return _M_replace_dispatch(__i1, __i2, __k1, __k2, _Integral());                    }                // Specializations for the common case of pointer and iterator:                // useful to avoid the overhead of temporary buffering in _M_replace.                basic_string&                    replace(iterator __i1, iterator __i2, _CharT* __k1, _CharT* __k2)                    {                        _GLIBCXX_DEBUG_PEDASSERT(_M_ibegin() <= __i1 && __i1 <= __i2                                && __i2 <= _M_iend());                        __glibcxx_requires_valid_range(__k1, __k2);                        return this->replace(__i1 - _M_ibegin(), __i2 - __i1,                                __k1, __k2 - __k1);                    }                basic_string&                    replace(iterator __i1, iterator __i2,                            const _CharT* __k1, const _CharT* __k2)                    {                        _GLIBCXX_DEBUG_PEDASSERT(_M_ibegin() <= __i1 && __i1 <= __i2                                && __i2 <= _M_iend());                        __glibcxx_requires_valid_range(__k1, __k2);                        return this->replace(__i1 - _M_ibegin(), __i2 - __i1,                                __k1, __k2 - __k1);                    }                basic_string&                    replace(iterator __i1, iterator __i2, iterator __k1, iterator __k2)                    {                        _GLIBCXX_DEBUG_PEDASSERT(_M_ibegin() <= __i1 && __i1 <= __i2                                && __i2 <= _M_iend());                        __glibcxx_requires_valid_range(__k1, __k2);                        return this->replace(__i1 - _M_ibegin(), __i2 - __i1,                                __k1.base(), __k2 - __k1);                    }                basic_string&                    replace(iterator __i1, iterator __i2,                            const_iterator __k1, const_iterator __k2)                    {                        _GLIBCXX_DEBUG_PEDASSERT(_M_ibegin() <= __i1 && __i1 <= __i2                                && __i2 <= _M_iend());                        __glibcxx_requires_valid_range(__k1, __k2);                        return this->replace(__i1 - _M_ibegin(), __i2 - __i1,                                __k1.base(), __k2 - __k1);                    }            private:                template<class _Integer>                    basic_string&                    _M_replace_dispatch(iterator __i1, iterator __i2, _Integer __n,                            _Integer __val, __true_type)                    { return _M_replace_aux(__i1 - _M_ibegin(), __i2 - __i1, __n, __val); }                template<class _InputIterator>                    basic_string&                    _M_replace_dispatch(iterator __i1, iterator __i2, _InputIterator __k1,                            _InputIterator __k2, __false_type);                basic_string&                    _M_replace_aux(size_type __pos1, size_type __n1, size_type __n2,                            _CharT __c)                    {                        if (this->max_size() - (this->size() - __n1) < __n2)                            __throw_length_error(__N("basic_string::_M_replace_aux"));                        _M_mutate(__pos1, __n1, __n2);                        if (__n2 == 1)                            _M_data()[__pos1] = __c;                        else if (__n2)                            traits_type::assign(_M_data() + __pos1, __n2, __c);                        return *this;                    }                basic_string&                    _M_replace_safe(size_type __pos1, size_type __n1, const _CharT* __s,                            size_type __n2)                    {                        _M_mutate(__pos1, __n1, __n2);                        if (__n2 == 1)                            _M_data()[__pos1] = *__s;                        else if (__n2)                            traits_type::copy(_M_data() + __pos1, __s, __n2);                        return *this;                    }                // _S_construct_aux is used to implement the 21.3.1 para 15 which                // requires special behaviour if _InIter is an integral type                template<class _InIterator>                    static _CharT*           

⌨️ 快捷键说明

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