業(yè)余時(shí)間研究了GCC4.1.2和SGI-STL源代碼,之后就打算對(duì)每種容器都做個(gè)小結(jié),也算是個(gè)備忘。講實(shí)現(xiàn)原理是人家侯捷老師的活,我只羅列容器的函數(shù)和編程注意事項(xiàng)。本篇總結(jié)STL-STRING,總結(jié)過(guò)程中寫(xiě)了個(gè)測(cè)試程序,用來(lái)驗(yàn)證這些函數(shù)在GCC4.1.2和VC++6.0編譯器上的可行性,同時(shí)模擬錯(cuò)誤的參數(shù)傳遞,盡可能暴漏出編程陷阱,讓您少走彎路。這份文檔只是一個(gè)索引,如果想要熟練的使用STL-STRING,必須在實(shí)踐中不斷的摸索和積累。
我將這些函數(shù)粗略的分為如下幾個(gè)類(lèi)別,點(diǎn)擊直接查看:
std::string -- 1 -- 內(nèi)部類(lèi)型定義
std::string -- 2 -- 構(gòu)造函數(shù)
std::string -- 3 -- 字符&&字符串操作函數(shù)
std::string -- 4 -- 比較函數(shù)
std::string -- 5 -- 查找函數(shù)
std::string -- 6 -- 替換函數(shù)
std::string -- 7 -- 賦值函數(shù)
std::string -- 8 -- 連接函數(shù)
std::string -- 9 -- 插入函數(shù)
typedef traits traits_type; |
typedef typename traits::char_type value_type; |
typedef size_t size_type; |
typedef Allocator allocator_type; |
typedef ptrdiff_t difference_type; |
typedef Allocator allocator_type; |
typedef Allocator allocator_type; |
typedef Allocator allocator_type; |
string()
構(gòu)造空的string,長(zhǎng)度為0,不含任何內(nèi)容 |
string(const string& str)
拷貝構(gòu)造函數(shù),使用str將其初始化 |
string(const string& str, size_type pos, size_type n = npos)
構(gòu)造string,并使用str從pos開(kāi)始的n個(gè)字符初始化 |
string(const char* s, size_type n)
構(gòu)造string,使用字符串s的前n個(gè)字符初始化 |
string(const char *s)
構(gòu)造string,使用以'\0'結(jié)尾的字符串s初始化。 |
string(int n, char c)
構(gòu)造string,使用n個(gè)字符c初始化 |
string(InputIterator begin, InputIterator end)
構(gòu)造string,使用迭代器指定的字符串初始化 |
除了上述函數(shù),也支持復(fù)制運(yùn)算符構(gòu)造變量,例如:std::string s = "abcde"。
當(dāng)構(gòu)造的string太長(zhǎng)而無(wú)法表達(dá)時(shí),構(gòu)造函數(shù)拋出length_error異常。
char operator[] (size_type pos) const
返回pos位置的字符 |
char & operator[] (size_type pos)
返回pos位置的字符引用 |
char & at (size_type pos)
返回pos位置的字符引用 |
const char & at (size_type pos) const
返回pos位置的字符const引用 |
const char* data () const
返回一個(gè)以非NULL終止的字符串 |
const charT* c_str () const
返回一個(gè)以NULL終止的字符串 |
size_type copy (char* s, size_type n, size_type pos = 0) const
將當(dāng)前字符串pos位置開(kāi)始的n個(gè)字符拷貝到s字符串中,返回實(shí)際拷貝的字符數(shù) |
int compare(const string & s) const
將當(dāng)前string以字典次序與s比較(0:相等;>0:大于s;<0:小于s) |
int compare(size_type pos, size_type n, const string& s) const
將當(dāng)前string從pos開(kāi)始的n個(gè)字符與s比較 |
int compare(size_type pos, size_type n, const string& s, size_type pos1, size_type n1) const
將當(dāng)前string的子串(從pos開(kāi)始的n個(gè)字符)與s的子串(從pos1開(kāi)始的n1個(gè)字符)比較 |
int compare(const char * s) const
將當(dāng)前string與null-terminated字符串s比較 |
int compare(size_type pos, size_type n, const char * s, size_type len = npos) const
將當(dāng)前string的子串(從pos開(kāi)始的n個(gè)字符)與字符串s的前l(fā)en個(gè)字符比較 |
bool operator == (const string & lhs, const string & rhs)
bool operator == (const char* lhs, const string & rhs)
bool operator == (const string & lhs, const char * rhs)
判斷"=="關(guān)系是否成立,返回boolean值(全局定義函數(shù),非成員函數(shù)) |
bool operator != (const string & lhs, const string & rhs)
bool operator != (const char * lhs, const string & rhs)
bool operator != (const string & lhs, const char* rhs)
判斷"!="關(guān)系是否成立(全局定義函數(shù),非成員函數(shù)) |
bool operator < (const string & lhs, const string & rhs)
bool operator < (const char* lhs, const string & rhs)
bool operator < (const string & lhs, const char* rhs)
判斷"<"關(guān)系是否成立(全局定義函數(shù),非成員函數(shù)) |
bool operator > (const string & lhs, const string & rhs)
bool operator > (const char* lhs, const string & rhs)
bool operator > (const string & lhs, const char * rhs)
判斷">"關(guān)系是否成立(全局定義函數(shù),非成員函數(shù)) |
bool operator <= (const string & lhs, const string & rhs)
bool operator <= (const char * lhs, const string & rhs)
bool operator <= (const string & lhs, const char * rhs)
判斷"<="關(guān)系是否成立(全局定義函數(shù),非成員函數(shù)) |
bool operator >= (const string & lhs, const string & rhs)
bool operator >= (const char * lhs, const string & rhs)
bool operator >= (const string & lhs, const char * rhs)
判斷">="關(guān)系是否成立(全局定義函數(shù),非成員函數(shù)) |
size_type find(const string& str, size_type pos = 0) const
當(dāng)前string從pos開(kāi)始向后查找str第一次出現(xiàn)的位置。
Searches for s as a substring of *this, beginning at character pos of *this. |
size_type find(const char* s, size_type pos, size_type n) const
當(dāng)前string從pos開(kāi)始向后查找“s子串內(nèi)前n個(gè)字符組成字符串”第一次出現(xiàn)的位置。
Searches for the first n characters of s as a substring of *this, beginning at character pos of *this. |
size_type find(const char* s, size_type pos = 0) const
當(dāng)前string從pos開(kāi)始向后查找以'\0'結(jié)尾子串s第一次出現(xiàn)的位置
Searches for a null-terminated character array as a substring of *this, beginning at character pos of *this. |
size_type find(char c, size_type pos = 0) const
當(dāng)前string從pos開(kāi)始向后查找字符c第一次出現(xiàn)的位置
Searches for the character c, beginning at character position pos. |
size_type rfind(const string & str, size_type pos = npos) const
當(dāng)前string從pos開(kāi)始向前查找str第一次出現(xiàn)的位置
Searches backward for s as a substring of *this, beginning at character position min(pos, size()) |
size_type rfind(const char* s, size_type pos, size_type n) const
當(dāng)前string從pos開(kāi)始向前查找“s子串內(nèi)前n個(gè)字符組成字符串”第一次出現(xiàn)的位置
Searches backward for the first n characters of s as a substring of *this, beginning at character position min(pos, size()) |
size_type rfind(const charT* s, size_type pos = npos) const
當(dāng)前string從pos開(kāi)始向前查找以'\0'結(jié)尾子串s第一次出現(xiàn)的位置
Searches backward for a null-terminated character array as a substring of *this, beginning at character min(pos, size()) |
size_type rfind(charT c, size_type pos = npos) const
當(dāng)前string從pos開(kāi)始向前查找字符c第一次出現(xiàn)的位置
Searches backward for the character c, beginning at character position min(pos, size()). |
size_type find_first_of(const string & s, size_type pos = 0) const
當(dāng)前string從pos開(kāi)始向前查找“s中任意一個(gè)字符”第一次出現(xiàn)的位置
Searches within *this, beginning at pos, for the first character that is equal to any character within s.
注意:如果pos超過(guò)當(dāng)前string的長(zhǎng)度,返回std::string::npos |
size_type find_first_of(const char* s, size_type pos, size_type n) const
當(dāng)前string從pos開(kāi)始向前查找“s前n個(gè)字符中任意一個(gè)字符”第一次出現(xiàn)的位置
Searches within *this, beginning at pos, for the first character that is equal to any character within the range [s, s+n).
注意:pos越界直接返回std::string::npos;n越界,會(huì)導(dǎo)致越界訪(fǎng)問(wèn)而coredump。 |
size_type find_first_of(const char* s, size_type pos = 0) const
當(dāng)前string從pos開(kāi)始向前查找“以null結(jié)尾字符串s中任意一個(gè)字符”第一次出現(xiàn)的位置
Equivalent to find_first_of(s, pos, traits::length(s)).
注意:如果pos超過(guò)當(dāng)前string的長(zhǎng)度,返回std::string::npos |
size_type find_first_of(char c, size_type pos = 0) const
當(dāng)前string從pos開(kāi)始向前查找字符c第一次出現(xiàn)的位置
Equivalent to find(c, pos). |
size_type find_first_not_of(const string& s, size_type pos = 0) const
當(dāng)前string從pos開(kāi)始向前查找第一個(gè)不在s中的任意字符位置
Searches within *this, beginning at pos, for the first character that is not equal to any character within s. |
size_type find_first_not_of(const char* s, size_type pos, size_type n) const
當(dāng)前string從pos開(kāi)始正向(forward)查找第一個(gè)不在“s前n個(gè)字符”中的任意字符位置
Searches within *this, beginning at pos, for the first character that is not equal to any character within the range [s, s+n). |
size_type find_first_not_of(const char* s, size_type pos = 0) const
當(dāng)前string從pos開(kāi)始正向(forward)查找不屬于“以null結(jié)尾字符串s”的第一個(gè)字符位置
Searches within *this, beginning at pos, for the first character that is not equal to any character within s. |
size_type find_first_not_of(char c, size_type pos = 0) const
當(dāng)前string從pos開(kāi)始正向(forward)查找不等于c的第一個(gè)字符位置
Searches within *this, beginning at pos, for the first character that is not equal to c. |
size_type find_last_of(const string& s, size_type pos = npos) const
當(dāng)前string從pos開(kāi)始逆向(backward)查找“s中任意字符”第一次出現(xiàn)的位置
Searches backward within *this, beginning at min(pos, size()), for the first character that is equal to any character within s. |
size_type find_last_of(const char * s, size_type pos, size_type n) const
當(dāng)前string從pos開(kāi)始逆向(backward)查找“s前n個(gè)字符之中任意字符”第一次出現(xiàn)的位置
Searches backward within *this, beginning at min(pos, size()), for the first character that is equal to any character within the first n characters of s. |
size_type find_last_of(const char * s, size_type pos = npos) const
當(dāng)前string從pos開(kāi)始逆向(backward)查找屬于“以null結(jié)尾字符串s”的第一個(gè)字符位置
Searches backward *this, beginning at min(pos, size()), for the first character that is equal to any character within s. |
size_type find_last_of(char c, size_type pos = npos) const
當(dāng)前string從pos開(kāi)始逆向(backward)查找字符c第一次出現(xiàn)的位置
Searches backward *this, beginning at min(pos, size()), for the first character that is equal to c. |
size_type find_last_not_of(const string& s, size_type pos = npos) const
當(dāng)前string從pos開(kāi)始逆向(forward)查找不在s中的任意字符第一次出現(xiàn)的位置
Searches backward within *this, beginning at min(pos, size()), for the first character that is not equal to any character within s. |
size_type find_last_not_of(const char* s, size_type pos, size_type n) const
當(dāng)前string從pos開(kāi)始逆向(backward)查找不在“s前n個(gè)字符”中的任意字符第一次出現(xiàn)的位置
Searches backward within *this, beginning at min(pos, size()), for the first character that is not equal to any character within the first n characters of s. |
size_type find_last_not_of(const char* s, size_type pos = npos) const
當(dāng)前string從pos開(kāi)始逆向(backward)查找不屬于“以null結(jié)尾字符串s”的任意字符第一次出現(xiàn)的位置
Searches backward *this, beginning at min(pos, size()), for the first character that is not equal to any character within s. |
size_type find_last_not_of(char c, size_type pos = npos) const
當(dāng)前string從pos開(kāi)始逆向(backward)查找不等于c的任意字符第一次出現(xiàn)的位置
Searches backward *this, beginning at min(pos, size()), for the first character that is not equal to c. |
std::string & replace(size_type pos1, size_type n1, const std::string & str, size_type pos2 = 0, size_type n2 = npos)
該函數(shù)的作用:使用str字符串從位置pos2開(kāi)始的n2個(gè)字符,替換當(dāng)前字符串從pos1位置開(kāi)始處的n1個(gè)字符。
可以這樣理解:該函數(shù)將當(dāng)前字符串從pos1開(kāi)始的n1個(gè)字符全部刪除,然后再用str整個(gè)字符串或者str從pos2開(kāi)始的n2個(gè)字符,從pos1位置開(kāi)始填入到當(dāng)前字符串中。
提醒:如果n1或者n2的數(shù)值超出了對(duì)應(yīng)字符串的長(zhǎng)度,以實(shí)際長(zhǎng)度為準(zhǔn),不會(huì)出現(xiàn)訪(fǎng)問(wèn)越界的情況。
注意:
a、如果pos1指定的位置超出當(dāng)前字符串的范圍,拋出std::out_of_range異常,不捕捉將導(dǎo)致coredump。
b、如果pos2指定的位置超出替換字符串str的范圍,拋出std::out_of_range異常,不捕捉將導(dǎo)致coredump。
|
std::string& replace(size_type pos, size_type n1, const char * s, size_type n2)
該函數(shù)的作用:使用字符串s的前n2個(gè)字符,替換當(dāng)前字符串從pos位置開(kāi)始處的n1個(gè)字符。
可以這樣理解:函數(shù)將當(dāng)前字符串從pos開(kāi)始的n1個(gè)字符全部刪除,然后再用字符串s的前n2個(gè)字符填入到當(dāng)前字符串中。類(lèi)似于函數(shù)1的pos2等于0,必須指定n2的這種情況,但也有一點(diǎn)的差別,下面會(huì)注意里描述這種差別。
注意:
a、如果pos指定的位置超出當(dāng)前字符串的范圍,拋出std::out_of_range異常,不捕捉將導(dǎo)致coredump。
b、該函數(shù)不會(huì)判斷字符串s和n2的大小關(guān)系,它嚴(yán)格地從s起始處拷貝n2個(gè)字符到指定位置。如果n2表示的長(zhǎng)度超出了s的范圍,它會(huì)讀取s后面的內(nèi)存空間,有可能會(huì)因?yàn)閮?nèi)存訪(fǎng)問(wèn)越界而coredump。但函數(shù)1的n2可以超出范圍,它以實(shí)際長(zhǎng)度為準(zhǔn)。
|
std::string& replace(size_type pos, size_type n1, const char* s)
該函數(shù)的作用:使用以'\0'為結(jié)尾的字符串s,替換當(dāng)前字符串從pos位置開(kāi)始處的n1個(gè)字符。
可以這樣理解:函數(shù)將當(dāng)前字符串從pos開(kāi)始的n1個(gè)字符全部刪除,然后再用字符串s從開(kāi)始到以'\0'結(jié)束的所有字符,從pos位置開(kāi)始填入到當(dāng)前字符串中。
注意:如果pos指定的位置超出當(dāng)前字符串的范圍,拋出std::out_of_range異常,不捕捉將導(dǎo)致coredump。
|
std::string& replace(size_type pos, size_type n1, size_type n2, char c)
該函數(shù)的作用:使用n2個(gè)c表示的字符,替換當(dāng)前字符串從pos位置開(kāi)始處的n1個(gè)字符。
可以這么理解:函數(shù)將當(dāng)前字符串從pos開(kāi)始的n1個(gè)字符全部刪除,然后再用n2個(gè)c字符,從pos位置開(kāi)始填入到當(dāng)前字符串中。
注意:如果pos指定的位置超出當(dāng)前字符串的范圍,拋出std::out_of_range異常,不捕捉將導(dǎo)致coredump。
|
std::string& replace(iterator i1, iterator i2, const std::string& str)
該函數(shù)的作用:使用字符串str,替換當(dāng)前字符串[i1,i2)之間的字符。
|
std::string& replace(iterator i1, iterator i2, const char* s, size_type n)
該函數(shù)的作用:使用字符串s的前n個(gè)字符,替換當(dāng)前字符串[i1,i2)之間的字符。
|
std::string& replace(iterator i1, iterator i2, const char* s)
該函數(shù)的作用:使用以'\0'結(jié)尾的字符串s,替換當(dāng)前字符串[i1,i2)之間的字符。
|
std::string& replace(iterator i1, iterator i2, size_type n, char c)
該函數(shù)的作用:使用n個(gè)c表示的字符,替換當(dāng)前字符串[i1,i2)之間的字符。
|
string &operator=(const string &s)
將當(dāng)前string賦值為s(成員函數(shù))
The assignment operator |
string& operator=(const char * s)
將當(dāng)前string賦值為“以null結(jié)尾的字符串s”
Assign a null-terminated character array to a string. |
string& operator=(char c)
將當(dāng)前string賦值為“字符c”
Assign a single character to a string. |
string& assign(const string& s)
將當(dāng)前string賦值為s
Synonym for operator= |
string & assign(const string & s, size_type pos, size_type n)
將當(dāng)前string賦值為“s從pos開(kāi)始的n個(gè)字符”
Assigns a substring of s to *this |
string & assign(const char * s, size_type n)
將當(dāng)前string賦值為“s的前n個(gè)字符”
Assigns the first n characters of s to *this. |
string& assign(const char* s)
將當(dāng)前string賦值為“以null結(jié)尾的字符串s”
Assigns a null-terminated array of characters to *this. |
string & assign(size_type n, char c)
將當(dāng)前string賦值為“n個(gè)字符c”
Erases the existing characters and replaces them by n copies of c. |
template <class InputIterator>
basic_string& assign(InputIterator first, InputIterator last)
將當(dāng)前string賦值為“迭代器[first,last)之間的字符”
Erases the existing characters and replaces them by [first, last) |
string &operator += (const string &s)
將string s連接到當(dāng)前string尾部 |
string & operator += (const char * s)
將以null結(jié)尾的字符串s連接到當(dāng)前string的尾部 |
string & operator += (char c)
將字符c連接到當(dāng)前string的尾部 |
string & append(const string & s)
將string s連接到當(dāng)前string的尾部 |
string & append(const string & s, size_type pos, size_type n)
將字符串s從pos開(kāi)始的n個(gè)字符連接到當(dāng)前string的尾部 |
string & append(const char * s)
將以null結(jié)尾的字符串s連接到當(dāng)前string的尾部 |
string & append(const char * s, size_type n)
將字符串s的前n個(gè)字符連接到當(dāng)前string的尾部 |
string & append(size_type n, char c)
將n個(gè)字符c連接到當(dāng)前string的尾部 |
template <class InputIterator>
string& append(InputIterator first, InputIterator last)
將迭代器[first, last)表示的字符連接到當(dāng)前string的尾部 |
string & insert(size_type pos, const string & s)
在當(dāng)前string的pos位置之前插入字符串s |
string & insert(size_type pos, const string & s, size_type pos1, size_type n)
在當(dāng)前string的pos位置之前插入“字符串s從pos1位置開(kāi)始的n個(gè)字符” |
string & insert(size_type pos, const char* s)
在當(dāng)前string的pos位置之前插入“以null結(jié)尾的字符串s” |
string & insert(size_type pos, const char * s, size_type n)
在當(dāng)前string的pos位置之前插入“字符串s的前n個(gè)字符” |
string & insert(size_type pos, size_type n, char c)
在當(dāng)前string的pos位置之前插入“n個(gè)字符c” |
string::iterator insert(string::iterator pos, char c)
在當(dāng)前string的pos位置之前插入“一個(gè)字符c” |
void insert(string::iterator pos, size_type n, char c)
在當(dāng)前string的pos位置之前插入“n個(gè)字符c” |
template <class InputIterator >
void insert(string::iterator pos, InputIterator first, InputIterator last)
在當(dāng)前string的pos位置之前插入“迭代器[first, last)表示的所有字符” |
0
0
(請(qǐng)您對(duì)文章做出評(píng)價(jià))
|