主要介紹兩種最重要的標(biāo)準(zhǔn)庫(kù)類型:string和vector。
string表示可變長(zhǎng)的字符序列售葡。
vector存放的是某種給定類型對(duì)象的可變長(zhǎng)序列。
1 標(biāo)準(zhǔn)庫(kù)類型string
#include <string>
using std::string;
1.1 定義和初始化string類型
string s1;
string s1(s2);
string s2 = s1; //拷貝初始化
string s3 = "hiya"; //直接初始化
string s4(10,'c');
string s8 = string(10,'c');
1.2 string對(duì)象上的操作
os<<s; is>>s; getline(is,s); s.empty(); s.size();
s[n]; s1+s2; s1=s2; s1==s2; s1!=s2; <, <=, >, >=;
string s1, s2;
cin >> s1 >> s2;
cout << s1 << s2 << endl;
string word; while(cin >> word) cout << word << endl;
int main() {string line; while(getline(cin, line)) cout << line << endl; return 0;}
string的empty()和size操作
if(!line.empty()) 表示如果字符串line是空的
line.size()返回值的數(shù)據(jù)類型是string::size_type類型忠藤,所以需要在使用前面加auto
auto len = line.size();
字面值和string對(duì)象相加
string s4 = s1 + ", ";//正確:把一個(gè)string對(duì)象和一個(gè)字面值相加
string s5 = "hello" + ", ";//錯(cuò)誤:兩個(gè)運(yùn)算對(duì)象都不是string
string s6 = s1 + ", " + "world";//正確:每個(gè)加法運(yùn)算符都有一個(gè)運(yùn)算對(duì)象是string
string s7 = "hello" + ", " + s2;//錯(cuò)誤:不能把字面值直接相加
處理每個(gè)字符挟伙?使用基于范圍的for語句
string str("some string");
for(auto c: str) cout << c << endl;
for(auto &c: s) c = toupper(c);
2 標(biāo)準(zhǔn)庫(kù)類型vector
#include <vector>
using std::vector;
vector<int> ivec;
vector<vector<int> >
2.1 定義和初始化vector對(duì)象
vector<T> v1 vector<T> v2(v1)
vector<T> v2 = v1 vector<T> v3(n,val)
vector<T> v4(n) vector<T> v5{a,b,c,...}
vector<T> v5 = {a,b,c,...}
2.2 其他vector操作
v2.push_back(i); v.empty(); v.size(); v[n];
vector<int> v{1,2,3,4,5,6,7,8,9};
for(auto &i: v) i *= i;
for(auto i: v) cout << i << " "; cout << endl;
使用下標(biāo)運(yùn)算符能獲取到指定的元素。和string一樣模孩,vector對(duì)象的下標(biāo)也是從0開始計(jì)起尖阔,下標(biāo)的類型是相應(yīng)的size_type類型贮缅。
3 迭代器介紹
類似于指針類型,迭代器也提供了對(duì)對(duì)象的間接訪問介却。就迭代器而言谴供,其對(duì)象是容器中的元素或者string對(duì)象中的字符。使用迭代器可以訪問某個(gè)元素齿坷,迭代器也能從一個(gè)元素移動(dòng)到另一個(gè)元素桂肌。迭代器有有效和無效之分,這一點(diǎn)和指針差不多永淌。有效的迭代器或者指向某個(gè)元素崎场,或者指向容器中尾元素的下一個(gè)位置。
3.1 使用迭代器
auto b = v.begin(), e = v.end();// b表示v的第一個(gè)元素遂蛀,e表示v為元素的下一個(gè)位置
//標(biāo)準(zhǔn)容器迭代器的運(yùn)算符
*iter //返回迭代器iter所指元素的引用
iter->mem //解引用iter并獲取該元素的名為mem的成員谭跨,等價(jià)于(*iter).mem
++iter //令itera指示容器中的下一個(gè)元素
--iter //令iter指示容器中的上一個(gè)元素
iter1 == iter2 //判斷兩個(gè)迭代器是否相等(不相等)
string s("some string");
if(s.begin() != s.end()){auto it = s.begin(); *it = toupper(*it);}
for(auto it = s.begin(); it != s.end()&&!isspace(*it); ++it) *it = toupper(*it);
迭代器類型
vector<int>::iterator it; // it 能讀寫vector<int>的元素
vector<int>::const_iterator it; // it 只能讀vector<int>的元素
string::iterator it;
string::const_iterator it;
auto it3 = v.cbegin();
只要兩個(gè)迭代器指向的是同一個(gè)容器中的元素或者尾元素的下一個(gè)位置,就能將其相減答恶,所得結(jié)果是兩個(gè)迭代器的距離饺蚊。所謂距離指的是右側(cè)的迭代器向前移動(dòng)多少位置就能追上左側(cè)的迭代器萍诱,其類型名為difference_type的帶符號(hào)整數(shù)悬嗓。
4 數(shù)組
在使用數(shù)組下標(biāo)的時(shí)候,通常將其定義為size_t類型裕坊。在cstddef頭文件中定義了size_t類型包竹。