📄 stl_string.h
字号:
size_type find_last_not_of(const _CharT* __s, size_type __pos,
size_type __n) const;
size_type find_last_not_of(_CharT __c, size_type __pos = npos) const;
public: // Substring.
_Self substr(size_type __pos = 0, size_type __n = npos) const {
if (__pos > size())
_M_throw_out_of_range();
return _Self(_M_start + __pos,
_M_start + __pos + min(__n, size() - __pos));
}
public: // Compare
int compare(const _Self& __s) const
{ return _M_compare(_M_start, _M_finish, __s._M_start, __s._M_finish); }
int compare(size_type __pos1, size_type __n1,
const _Self& __s) const {
if (__pos1 > size())
_M_throw_out_of_range();
return _M_compare(_M_start + __pos1,
_M_start + __pos1 + min(__n1, size() - __pos1),
__s._M_start, __s._M_finish);
}
int compare(size_type __pos1, size_type __n1,
const _Self& __s,
size_type __pos2, size_type __n2) const {
if (__pos1 > size() || __pos2 > __s.size())
_M_throw_out_of_range();
return _M_compare(_M_start + __pos1,
_M_start + __pos1 + min(__n1, size() - __pos1),
__s._M_start + __pos2,
__s._M_start + __pos2 + min(__n2, size() - __pos2));
}
int compare(const _CharT* __s) const {
__STL_FIX_LITERAL_BUG(__s)
return _M_compare(_M_start, _M_finish, __s, __s + _Traits::length(__s));
}
int compare(size_type __pos1, size_type __n1, const _CharT* __s) const {
__STL_FIX_LITERAL_BUG(__s)
if (__pos1 > size())
_M_throw_out_of_range();
return _M_compare(_M_start + __pos1,
_M_start + __pos1 + min(__n1, size() - __pos1),
__s, __s + _Traits::length(__s));
}
int compare(size_type __pos1, size_type __n1, const _CharT* __s,
size_type __n2) const {
__STL_FIX_LITERAL_BUG(__s)
if (__pos1 > size())
_M_throw_out_of_range();
return _M_compare(_M_start + __pos1,
_M_start + __pos1 + min(__n1, size() - __pos1),
__s, __s + __n2);
}
public: // Helper functions for compare.
static int _M_compare(const _CharT* __f1, const _CharT* __l1,
const _CharT* __f2, const _CharT* __l2) {
const ptrdiff_t __n1 = __l1 - __f1;
const ptrdiff_t __n2 = __l2 - __f2;
const int cmp = _Traits::compare(__f1, __f2, min(__n1, __n2));
return cmp != 0 ? cmp : (__n1 < __n2 ? -1 : (__n1 > __n2 ? 1 : 0));
}
};
// ------------------------------------------------------------
// Non-member functions.
template <class _CharT, class _Traits, class _Alloc>
inline basic_string<_CharT,_Traits,_Alloc>
operator+(const basic_string<_CharT,_Traits,_Alloc>& __s,
const basic_string<_CharT,_Traits,_Alloc>& __y)
{
typedef basic_string<_CharT,_Traits,_Alloc> _Str;
typedef typename _Str::_Reserve_t _Reserve_t;
# ifdef __GNUC__
// gcc counts this as a function
_Str __result = _Str(_Reserve_t(),__s.size() + __y.size());
# else
_Str __result(_Reserve_t(), __s.size() + __y.size());
# endif
__result.append(__s);
__result.append(__y);
return __result;
}
template <class _CharT, class _Traits, class _Alloc>
inline basic_string<_CharT,_Traits,_Alloc>
operator+(const _CharT* __s,
const basic_string<_CharT,_Traits,_Alloc>& __y) {
__STL_FIX_LITERAL_BUG(__s)
typedef basic_string<_CharT,_Traits,_Alloc> _Str;
typedef typename _Str::_Reserve_t _Reserve_t;
const size_t __n = _Traits::length(__s);
# ifdef __GNUC__
_Str __result = _Str(_Reserve_t(), __n + __y.size());
# else
_Str __result(_Reserve_t(), __n + __y.size());
# endif
__result.append(__s, __s + __n);
__result.append(__y);
return __result;
}
template <class _CharT, class _Traits, class _Alloc>
inline basic_string<_CharT,_Traits,_Alloc>
operator+(_CharT __c,
const basic_string<_CharT,_Traits,_Alloc>& __y) {
typedef basic_string<_CharT,_Traits,_Alloc> _Str;
typedef typename _Str::_Reserve_t _Reserve_t;
# ifdef __GNUC__
_Str __result = _Str(_Reserve_t(), 1 + __y.size());
# else
_Str __result(_Reserve_t(), 1 + __y.size());
# endif
__result.push_back(__c);
__result.append(__y);
return __result;
}
template <class _CharT, class _Traits, class _Alloc>
inline basic_string<_CharT,_Traits,_Alloc>
operator+(const basic_string<_CharT,_Traits,_Alloc>& __x,
const _CharT* __s) {
__STL_FIX_LITERAL_BUG(__s)
typedef basic_string<_CharT,_Traits,_Alloc> _Str;
typedef typename _Str::_Reserve_t _Reserve_t;
const size_t __n = _Traits::length(__s);
# ifdef __GNUC__
_Str __result = _Str(_Reserve_t(), __x.size() + __n, __x.get_allocator());
# else
_Str __result(_Reserve_t(), __x.size() + __n, __x.get_allocator());
# endif
__result.append(__x);
__result.append(__s, __s + __n);
return __result;
}
template <class _CharT, class _Traits, class _Alloc>
inline basic_string<_CharT,_Traits,_Alloc>
operator+(const basic_string<_CharT,_Traits,_Alloc>& __x,
const _CharT __c) {
typedef basic_string<_CharT,_Traits,_Alloc> _Str;
typedef typename _Str::_Reserve_t _Reserve_t;
# ifdef __GNUC__
_Str __result = _Str(_Reserve_t(), __x.size() + 1, __x.get_allocator());
# else
_Str __result(_Reserve_t(), __x.size() + 1, __x.get_allocator());
# endif
__result.append(__x);
__result.push_back(__c);
return __result;
}
// Operator== and operator!=
template <class _CharT, class _Traits, class _Alloc>
inline bool
operator==(const basic_string<_CharT,_Traits,_Alloc>& __x,
const basic_string<_CharT,_Traits,_Alloc>& __y) {
return __x.size() == __y.size() &&
_Traits::compare(__x.data(), __y.data(), __x.size()) == 0;
}
template <class _CharT, class _Traits, class _Alloc>
inline bool
operator==(const _CharT* __s,
const basic_string<_CharT,_Traits,_Alloc>& __y) {
__STL_FIX_LITERAL_BUG(__s)
size_t __n = _Traits::length(__s);
return __n == __y.size() && _Traits::compare(__s, __y.data(), __n) == 0;
}
template <class _CharT, class _Traits, class _Alloc>
inline bool
operator==(const basic_string<_CharT,_Traits,_Alloc>& __x,
const _CharT* __s) {
__STL_FIX_LITERAL_BUG(__s)
size_t __n = _Traits::length(__s);
return __x.size() == __n && _Traits::compare(__x.data(), __s, __n) == 0;
}
// Operator< (and also >, <=, and >=).
template <class _CharT, class _Traits, class _Alloc>
inline bool
operator<(const basic_string<_CharT,_Traits,_Alloc>& __x,
const basic_string<_CharT,_Traits,_Alloc>& __y) {
return basic_string<_CharT,_Traits,_Alloc>
::_M_compare(_Make_ptr(__x.begin()), _Make_ptr(__x.end()),
_Make_ptr(__y.begin()), _Make_ptr(__y.end())) < 0;
}
template <class _CharT, class _Traits, class _Alloc>
inline bool
operator<(const _CharT* __s,
const basic_string<_CharT,_Traits,_Alloc>& __y) {
__STL_FIX_LITERAL_BUG(__s)
size_t __n = _Traits::length(__s);
return basic_string<_CharT,_Traits,_Alloc>
::_M_compare(__s, __s + __n, _Make_ptr(__y.begin()), _Make_ptr(__y.end())) < 0;
}
template <class _CharT, class _Traits, class _Alloc>
inline bool
operator<(const basic_string<_CharT,_Traits,_Alloc>& __x,
const _CharT* __s) {
__STL_FIX_LITERAL_BUG(__s)
size_t __n = _Traits::length(__s);
return basic_string<_CharT,_Traits,_Alloc>
::_M_compare(_Make_ptr(__x.begin()), _Make_ptr(__x.end()), __s, __s + __n) < 0;
}
#ifdef __STL_USE_SEPARATE_RELOPS_NAMESPACE
template <class _CharT, class _Traits, class _Alloc>
inline bool
operator!=(const basic_string<_CharT,_Traits,_Alloc>& __x,
const basic_string<_CharT,_Traits,_Alloc>& __y) {
return !(__x == __y);
}
template <class _CharT, class _Traits, class _Alloc>
inline bool
operator>(const basic_string<_CharT,_Traits,_Alloc>& __x,
const basic_string<_CharT,_Traits,_Alloc>& __y) {
return __y < __x;
}
template <class _CharT, class _Traits, class _Alloc>
inline bool
operator<=(const basic_string<_CharT,_Traits,_Alloc>& __x,
const basic_string<_CharT,_Traits,_Alloc>& __y) {
return !(__y < __x);
}
template <class _CharT, class _Traits, class _Alloc>
inline bool
operator>=(const basic_string<_CharT,_Traits,_Alloc>& __x,
const basic_string<_CharT,_Traits,_Alloc>& __y) {
return !(__x < __y);
}
#endif /* __STL_USE_SEPARATE_RELOPS_NAMESPACE */
template <class _CharT, class _Traits, class _Alloc>
inline bool
operator!=(const _CharT* __s,
const basic_string<_CharT,_Traits,_Alloc>& __y) {
__STL_FIX_LITERAL_BUG(__s)
return !(__s == __y);
}
template <class _CharT, class _Traits, class _Alloc>
inline bool
operator!=(const basic_string<_CharT,_Traits,_Alloc>& __x,
const _CharT* __s) {
__STL_FIX_LITERAL_BUG(__s)
return !(__x == __s);
}
template <class _CharT, class _Traits, class _Alloc>
inline bool
operator>(const _CharT* __s,
const basic_string<_CharT,_Traits,_Alloc>& __y) {
__STL_FIX_LITERAL_BUG(__s)
return __y < __s;
}
template <class _CharT, class _Traits, class _Alloc>
inline bool
operator>(const basic_string<_CharT,_Traits,_Alloc>& __x,
const _CharT* __s) {
__STL_FIX_LITERAL_BUG(__s)
return __s < __x;
}
template <class _CharT, class _Traits, class _Alloc>
inline bool
operator<=(const _CharT* __s,
const basic_string<_CharT,_Traits,_Alloc>& __y) {
__STL_FIX_LITERAL_BUG(__s)
return !(__y < __s);
}
template <class _CharT, class _Traits, class _Alloc>
inline bool
operator<=(const basic_string<_CharT,_Traits,_Alloc>& __x,
const _CharT* __s) {
__STL_FIX_LITERAL_BUG(__s)
return !(__s < __x);
}
template <class _CharT, class _Traits, class _Alloc>
inline bool
operator>=(const _CharT* __s,
const basic_string<_CharT,_Traits,_Alloc>& __y) {
__STL_FIX_LITERAL_BUG(__s)
return !(__s < __y);
}
template <class _CharT, class _Traits, class _Alloc>
inline bool
operator>=(const basic_string<_CharT,_Traits,_Alloc>& __x,
const _CharT* __s) {
__STL_FIX_LITERAL_BUG(__s)
return !(__x < __s);
}
// Swap.
#ifdef __STL_FUNCTION_TMPL_PARTIAL_ORDER
template <class _CharT, class _Traits, class _Alloc>
inline void swap(basic_string<_CharT,_Traits,_Alloc>& __x,
basic_string<_CharT,_Traits,_Alloc>& __y) {
__x.swap(__y);
}
#endif /* __STL_FUNCTION_TMPL_PARTIAL_ORDER */
// I/O.
#ifdef __STL_USE_NEW_IOSTREAMS
template <class _CharT, class _Traits, class _Alloc>
basic_ostream<_CharT, _Traits>&
operator<<(basic_ostream<_CharT, _Traits>& __os,
const basic_string<_CharT,_Traits,_Alloc>& __s);
template <class _CharT, class _Traits, class _Alloc>
basic_istream<_CharT, _Traits>&
operator>>(basic_istream<_CharT, _Traits>& __is,
basic_string<_CharT,_Traits,_Alloc>& __s);
template <class _CharT, class _Traits, class _Alloc>
basic_istream<_CharT, _Traits>&
getline(basic_istream<_CharT, _Traits>& __is,
basic_string<_CharT,_Traits,_Alloc>& __s,
_CharT __delim);
# if !(defined (__BORLANDC__) && ! defined (__STL_USE_OWN_NAMESPACE))
template <class _CharT, class _Traits, class _Alloc>
inline basic_istream<_CharT, _Traits>&
getline(basic_istream<_CharT, _Traits>& __is,
basic_string<_CharT,_Traits,_Alloc>& __s)
{
return getline(__is, __s, '\n');
}
# endif
#else /* __STL_USE_NEW_IOSTREAMS */
template <class _CharT, class _Traits, class _Alloc>
ostream& operator<<(ostream& __os,
const basic_string<_CharT,_Traits,_Alloc>& __s);
template <class _CharT, class _Traits, class _Alloc>
istream& operator>>(istream& __is, basic_string<_CharT,_Traits,_Alloc>& __s);
template <class _CharT, class _Traits, class _Alloc>
istream& getline(istream& __is,
basic_string<_CharT,_Traits,_Alloc>& __s,
_CharT __delim);
template <class _CharT, class _Traits, class _Alloc>
inline istream&
getline(istream& __is, basic_string<_CharT,_Traits,_Alloc>& __s)
{
return getline(__is, __s, '\n');
}
#endif /* __STL_USE_NEW_IOSTREAMS */
template <class _CharT, class _Traits, class _Alloc>
void _S_string_copy(const basic_string<_CharT,_Traits,_Alloc>& __s,
_CharT* __buf,
size_t __n);
__STL_END_NAMESPACE
// cleanup
# undef _Make_ptr
# undef _Make_iterator
# undef _Make_const_iterator
#if defined(__sgi) && !defined(__GNUC__) && (_MIPS_SIM != _MIPS_SIM_ABI32)
#pragma reset woff 1174
#pragma reset woff 1375
#endif
# if !defined (__STL_LINK_TIME_INSTANTIATION)
# include <stl_string.c>
# endif
#endif /* __SGI_STL_STRING */
// Local Variables:
// mode:C++
// End:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -