C++ string??????????д?????????????????
???????????? ???????[ 2016/12/8 11:06:31 ] ????????C++ String
????8??????+=????????????????????
String& String::operator+=(const String &s)
{
_addAssignOpt(s._cstr?? s._length);
return *this;
}
String& String::operator+=(const char *cstr)
{
if(cstr != NULL)
_addAssignOpt(cstr?? strlen(cstr));
return *this;
}
void String::_addAssignOpt(const char *cstr?? size_t len)
{
if(*_used == 1)
_addString(cstr?? len);
else
{
_decUsed();
_cstr = _renewAndCat(cstr?? len);
_used = new size_t(1);
}
}
void String::_addString(const char *cstr?? size_t len)
{
//????????????????ü????1????????
if(*_used != 1)
return;
if(len + _length > _capacity)
{
char *ptr = _renewAndCat(cstr?? len);
delete[] _cstr;
_cstr = ptr;
}
else
{
strncat(_cstr?? cstr?? len);
_length += len;
}
}
char* String::_renewAndCat(const char *cstr?? size_t len)
{
size_t new_len = len + _length;
size_t capacity = new_len;
capacity += (capacity >> 1);
char *ptr = new char[capacity+1];
if(_cstr != NULL)
memcpy(ptr?? _cstr?? _length);
ptr[_length] = 0;
_length = new_len;
_capacity = capacity;
strncat(ptr?? cstr?? len);
return ptr;
}
????+=????????????????????????????t??????????????д???????????д???????????????????????????????????ü???????????????μ?????????????????????????????????????????????????????????и???????????????????????ü????1??????????????ü????????????????????????????????????????????????????????????????????????????????????????ü???????1??ò??ò????????
???????????ü????1????????????????????????и???????飬???????????κβ??????????????????????????????????????????????????????????棬???????????????????????????????????????У????????????????·?????????
?????????ü??????1??????????????_decUsed??????????????????????ü???????????_renewAndCat????????????μ???????飬???????_cstr???????new????μ????ü????????????1.
?????????????У?_renewAndCat???????????μ???????飬????????????????????μ?????????У??????μ?????????????????????????μ???????????????_addString????е????ü????1?????????????????????????????????????????????????????????????????_renewAndCat???·?????????????飬?????и?????????????????delete[]??????_cstr????_renewAndCat??????????????????????
??????????????????????????????????????+=???????????????????????Σ???????????????????????????????????η???????????????????????????1.5??????????????????+=????????????????????????????????????????????????????·???????????????????????????+=??????*_used????1?????′?????+=???????п?????????????????????
??????????????????Ч????????1.5???????????????????????????????????ó????????????????λ???????£?
????int capacity = len;
????capacity += (capacity >> 1)
????????????????????“x = capacity + capacity/2??capacity = x”????????????????????2??????????????1.5???????????
????9??????????
????void String::clear()
????{
????_decUsed();
????_cstr = NULL;
????_used = new size_t(1);
????_length = 0;
????_capacity = 0;
????}
?????ú?????????????????????????????????????????????????????_decUsed???????????????????????????????ü?????????????????????????????????ɡ?????????????????????????
??????????o???????String????????
????10??????+??????
????String operator +(const String &lhs?? const String &rhs)
????{
????String stemp(lhs);
????stemp += rhs;
????return stemp;
????}
?????ú??????????????????????+=????????????????????rhs?????????????????stemp?????????????????????????????stemp???????stemp?????????????+?????????????
????11???????????????
????ostream& operator << (ostream &os?? const String &s)
????{
????os<<s.cstr();
????return os;
????}
????12???????????????
????istream& operator >> (istream &in?? String &s)
????{
????const int BUFFER_SIZE = 256;
????char buffer[BUFFER_SIZE];
????char *end = buffer + BUFFER_SIZE -1;
????s.clear();
????do
????{
????//?????ж????????????????????????δ??????????????????buffer
????//??????????buffer???????????get???????' 主站蜘蛛池模板: 欧美在线黄色 | 午夜寂寞影 | 免费黄色a | 美女黄网站全是免费网址 | 亚洲第一网站 | 影视先锋av资源噜噜 | 成人理论片 | 欧美一级鲁丝片免费看 | 东京道区二区三区 | 丝袜国产在线观看 | 国产精品入口麻豆免费观看 | 亚洲欧美日产综合一区二区三区 | 欧美a在线观看 | 午夜寂寞影院视频在线观看 | 日日做日日摸夜夜爽 | 欧美成人xxxxxxxx在线 | 午夜影院在线观看 | 毛片在线不卡 | 中文字幕伦伦在线中文字 | 免费在线成人网 | 爽爽免费视频 | 精品日韩在线 | 99精品免费 | 午夜在线观看免费观看大全 | 57pao国产成视频免费播放 | 三级全黄裸体 | 日韩国产中文字幕 | 污宅男666在线永久免费观看 | 成人在线观看一区 | 国产成人午夜片在线观看 | 欧美日韩在线一区二区三区 | 成人合成mv福利视频网站 | 日本三级唾液浓厚在线观看 | 欧美xxx视频在线观看 | 2021天天躁夜夜燥西西 | a4yy私人影院免费毛片 | 亚洲一区二区欧美日韩 | 午夜国产大片免费观看 | 亚欧在线观看 | 欧美视频 亚洲视频 | 国产区精品高清在线观看 |