• <tfoot id="ukgsw"><input id="ukgsw"></input></tfoot>
    
    • 久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
      分享

      將一個char類型字符添加到string的尾部的方法---C++

       KookNut39 2022-05-17 發布于北京

      文章目錄

      1. += 簡單粗暴的方法

      	std::string s("hello");
      	const char c = 'N';//將要加到s后面的字符
      	s += c;
      	std::cout << s << std::endl;
      
      	return 0;
      

      在string內部對于+=這個操作符是重新寫了的,如下, push_back其實就是往尾部增加一個字符,那這樣看來,直接調用push_back豈不是更高效?

      _CONSTEXPR20 basic_string& operator+=(_Elem _Ch) {
              push_back(_Ch);
              return *this;
          }
      

      2. string內置方法push_back

      	std::string s("hello");
      	const char c = 'N';//將要加到s后面的字符
      	//s += c;
      	s.push_back(c);
      	std::cout << s << std::endl;
      

      我們來看看push_back內部是如何實現的:

       _CONSTEXPR20 void push_back(const _Elem _Ch) { // insert element at end
              const size_type _Old_size = _Mypair._Myval2._Mysize;
              if (_Old_size < _Mypair._Myval2._Myres) {
                  _Mypair._Myval2._Mysize = _Old_size + 1;
                  _Elem* const _Ptr       = _Mypair._Myval2._Myptr();
                  _Traits::assign(_Ptr[_Old_size], _Ch);
                  _Traits::assign(_Ptr[_Old_size + 1], _Elem());
                  return;
              }
      
              _Reallocate_grow_by(
                  1,
                  [](_Elem* const _New_ptr, const _Elem* const _Old_ptr, const size_type _Old_size, const _Elem _Ch) {
                      _Traits::copy(_New_ptr, _Old_ptr, _Old_size);
                      _Traits::assign(_New_ptr[_Old_size], _Ch);
                      _Traits::assign(_New_ptr[_Old_size + 1], _Elem());
                  },
                  _Ch);
          }
      

      3. string內置方法insert

      std::string s("hello");
      	const char c = 'N';//將要加到s后面的字符
      	//s += c;
      	//s.push_back(c);
      	s.insert(s.length(), 1, c);
      	std::cout << s << std::endl;
      

      以上這段代碼的意思,就是往string的尾部,插入一個字符c,insert三參數。

      4. string內置方法append

      std::string s("hello");
      	const char c = 'N';//將要加到s后面的字符
      	//s += c;
      	//s.push_back(c);
      	//s.insert(s.length(), 1, c);
      	s.append(1, c);
      	std::cout << s << std::endl;
      

      那么看看append是如何實現的,和push_back有啥區別,其實仔細閱讀兩段代碼是非常相似的,只是把append中的參數count替換成1,就是push_back的實現了

       _CONSTEXPR20 basic_string& append(_CRT_GUARDOVERFLOW const size_type _Count, const _Elem _Ch) {
              // append _Count * _Ch
              const size_type _Old_size = _Mypair._Myval2._Mysize;
              if (_Count <= _Mypair._Myval2._Myres - _Old_size) {
                  _Mypair._Myval2._Mysize = _Old_size + _Count;
                  _Elem* const _Old_ptr   = _Mypair._Myval2._Myptr();
                  _Traits::assign(_Old_ptr + _Old_size, _Count, _Ch);
                  _Traits::assign(_Old_ptr[_Old_size + _Count], _Elem());
                  return *this;
              }
      
              return _Reallocate_grow_by(
                  _Count,
                  [](_Elem* const _New_ptr, const _Elem* const _Old_ptr, const size_type _Old_size, const size_type _Count,
                      const _Elem _Ch) {
                      _Traits::copy(_New_ptr, _Old_ptr, _Old_size);
                      _Traits::assign(_New_ptr + _Old_size, _Count, _Ch);
                      _Traits::assign(_New_ptr[_Old_size + _Count], _Elem());
                  },
                  _Count, _Ch);
          }
      

      5. 使用流的方式來操作,方式稍微有點怪,但也不難理解

      #include <iostream>
      #include <sstream>
      int main() {
      	std::string s("hello");
      	const char c = 'N';//將要加到s后面的字符
      	//s += c;
      	//s.push_back(c);
      	//s.insert(s.length(), 1, c);
      	//s.append(1, c);
      	std::stringstream ts;
      	ts << s << c;//將字符串s和字符c輸入到臨時字符串流ts中
      	ts >> s;//ts將自己內部保存的值,反吐給s
      	std::cout << s << std::endl;
      
      	return 0;
      }
      

      “美言可以市尊,美行可以加人。”—《道德經》(第六十二章)

        轉藏 分享 獻花(0

        0條評論

        發表

        請遵守用戶 評論公約

        類似文章 更多

        主站蜘蛛池模板: 人妻日韩精品中文字幕| 中文字幕有码日韩精品| 青青青爽在线视频观看| 2020国产欧洲精品网站| 久久精品人妻无码专区| 亚洲A成人片在线播放| 加勒比无码人妻东京热| 久久婷婷国产剧情内射白浆| 亚洲欧美综合中文| 免费无码成人AV在线播放不卡| 亚洲精品一区二区动漫| 久久伊人色AV天堂九九小黄鸭| 狠狠综合久久综合88亚洲| 一本大道久久东京热AV| 亚洲av无码之国产精品网址蜜芽| 6080午夜三级中文在线观看| 伊人久久无码大香线蕉综合| 成人三级视频在线观看不卡| 成人免费A级毛片无码网站入口| 日日橹狠狠爱欧美视频| 无码囯产精品一区二区免费| 欧美性XXXX极品HD欧美风情| 国产成人一区二区三区免费| 亚洲高清揄拍自拍| 中文字幕乱码一区二区免费| 国产一区二区三区av在线无码观看| 美女内射无套日韩免费播放| 国产亚洲精品AA片在线爽| 中文字幕亚洲无线码在线一区 | YY111111少妇影院| 久久96热在精品国产高清| 亚洲夂夂婷婷色拍ww47| 欧洲卡一卡二卡三爱区| 成人午夜大片免费看爽爽爽 | 国产色秀视频在线播放| 成人欧美一区二区三区的电影 | 亚洲人妻精品一区二区| 亚洲AV无码专区国产乱码电影| 国产萌白酱喷水视频在线观看| 亚洲成人av在线资源| 亚洲尤码不卡av麻豆|