標準庫中的string類
string類
1. 字符串是表示字符序列的類
2. 標準的字符串類提供了對此類對象的支持,其接口類似于標準字符容器的接口,但添加了專門用于操作單字節字符字符串的設計特性。
3. string類是使用char(即作為它的字符類型,使用它的默認char_traits和分配器類型(關于模板的更多信 息,請參閱basic_string)。
4. string類是basic_string模板類的一個實例,它使用char來實例化basic_string模板類,并用char_traits和allocator作為basic_string的默認參數(根于更多的模板信息請參考basic_string)。
5. 注意,這個類獨立于所使用的編碼來處理字節:如果用來處理多字節或變長字符(如UTF-8)的序列,這個類的所有成員(如長度或大小)以及它的迭代器,將仍然按照字節(而不是實際編碼的字符)來操作。
總結:1. string是表示字符串的字符串類2. 該類的接口與常規容器的接口基本相同,再添加了一些專門用來操作string的常規操作。3. string在底層實際是:basic_string模板類的別名,typedef basic_string<char, char_traits, allocator> string;4. 不能操作多字節或者變長字符的序列。
在使用string類時,必須包含#include<string>頭文件以及using namespace std; ?
string類的常用接口說明?
string類對象的常見構造
#include<string>
#include <iostream>
using namespace std;int main()
{string s0;string s1("hello world");string s2(s1);string s3(s1, 5, 3);string s4(s1, 5);string s5(10, '#');cout << s0 << endl;cout << s1 << endl;cout << s2 << endl;cout << s3 << endl;cout << s4 << endl;cout << s5 << endl;return 0;
}
?string類對象的容量操作
注意:1. size()與length()方法底層實現原理完全相同,引入size()的原因是為了與其他容器的接口保持一 致,一般情況下基本都是用size()。2. clear()只是將string中有效字符清空,不改變底層空間大小。3. resize(size_t n) 與 resize(size_t n, char c)都是將字符串中有效字符個數改變到n個,不同的是當字符個數增多時:resize(n)用0來填充多出的元素空間,resize(size_t n, char c)用字符c來填充多出的元素空間。注意:resize在改變元素個數時,如果是將元素個數增多,可能會改變底層容量的大 小,如果是將元素個數減少,底層空間總大小不變。4. reserve(size_t res_arg=0):為string預留空間,不改變有效元素個數,當reserve的參數小于 string的底層空間總大小時,reserver不會改變容量大小。
string類對象的訪問及遍歷操作
#include<string>
#include <iostream>
using namespace std;int main()
{string s1("hello world");// 下標+[]for (size_t i = 0; i < s1.size(); i++){cout << s1[i];//cout << s1.operator[](i);}cout << endl;//cout<<s1;return 0;
}
?operator[ ]的使用
#include<string>
#include <iostream>
using namespace std;int main()
{string s1("hello world");string::iterator it1 = s1.begin();while (it1 != s1.end()){cout << *it1;it1++;}cout << endl;return 0;
}
迭代器行為像指針一樣的類型對象
#include<string>
#include <iostream>
using namespace std;int main()
{string s1("hello world");for (auto e : s1){cout << e;}cout << endl;return 0;
}
范圍for底層就是迭代器?