C++ string的構造函數


C++ string類有多種構造函數,今天剛好看書碰到了,所以記錄總結以下。

很多東西之所以用不到,是因為不知道。合適的地方使用合適的工具能大大提高效率。這是學習的一個意義。

string的一般構造方法包括字符串構造string("abc")和拷貝構造string(str). 除此之外還有一些不常見但是可能會很有用的版本。

  1. 將構造的對象初始化為s的前n個字符,s不夠n個時將相鄰的內存單元的內容當作s的一部分繼續復制:
    string(const char *s, size_type n, const Allocator &a = Allocator());
    root [17] string ett("Telephone home.", 4)
    (std::string &) "Tele" 
  2. 將構造的對象初始化為s的后n個字符,也就是從s指向的內存的第n個字節開始復制:
    string(const string &str, size_type pos,size_type n = npos, const Allocator &a = Allocator());
    root [15] string att("Telephone home.")
    (std::string &) "Telephone home."
    root [16] string et(att, 4)
    (std::string &) "phone home."
  3. 創建一個n個字符的string對象:
    string(size_type n, char c, const Allocator &a = Allocator())
    root [6] string(10, 'a')
    (std::string) "aaaaaaaaaa"

 

可以看出1和2構造函數的主要區別在於是用字符串常量還是string對象做第一個參數。

另一個區別是,2中的第三個參數是要復制的字符個數,和1的第二個從參數不同的是,如果npos過大的話,它會在復制完str后停止:

root [0] string att("Telephone home.")
(std::string &) "Telephone home."
root [4] string (att, 4, 100)
(std::string) "phone home."

root [5] string ("Telephone home.", 4, 5)
(std::string) "phone"
root [1] string ("Telephone home.", 4, 100)
(std::string) "phone home."

上述代碼中因為第三個參數是int,所以所有的構造函數都自動和2匹配,並且將字符串常量初始化為臨時string對象。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM