首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于内存方面的知识,该如何解决

2012-03-06 
关于内存方面的知识getline()和cin.getline()在内存中整个实现的过程是怎样的?getline() 原型:istream& ge

关于内存方面的知识
getline()和cin.getline()在内存中整个实现的过程是怎样的?
getline() 原型:istream& getline( istream& is, string& s, char delimiter = '\n' );
cin.getline原型:cin.getline(string &,LENGTH,char delimiter = '\n' );


[解决办法]
看 stl 源码
[解决办法]

C/C++ code
 


template <class _Elem,
class _Traits,
class _Alloc> inline
basic_istream <_Elem, _Traits>& __CLRCALL_OR_CDECL getline(
basic_istream <_Elem, _Traits>& _Istr,
basic_string <_Elem, _Traits, _Alloc>& _Str,
const _Elem _Delim)
{// get characters into string, discard delimiter
typedef basic_istream <_Elem, _Traits> _Myis;
ios_base::iostate _State = ios_base::goodbit;
bool _Changed = false;
const typename _Myis::sentry _Ok(_Istr, true);

if (_Ok)
{// state okay, extract characters
_TRY_IO_BEGIN
_Str.erase();
const typename _Traits::int_type _Metadelim =
_Traits::to_int_type(_Delim);
typename _Traits::int_type _Meta = _Istr.rdbuf()->sgetc();

for (; ; _Meta = _Istr.rdbuf()->snextc())
if (_Traits::eq_int_type(_Traits::eof(), _Meta))
{// end of file, quit
_State |= ios_base::eofbit;
break;
}
else if (_Traits::eq_int_type(_Meta, _Metadelim))
{// got a delimiter, discard it and quit
_Changed = true;
_Istr.rdbuf()->sbumpc();
break;
}
else if (_Str.max_size() <= _Str.size())
{// string too large, quit
_State |= ios_base::failbit;
break;
}
else
{// got a character, add it to string
_Str += _Traits::to_char_type(_Meta);
_Changed = true;
}
_CATCH_IO_(_Istr)
}

if (!_Changed)
_State |= ios_base::failbit;
_Istr.setstate(_State);
return (_Istr);
}

热点排行