C++字符串、向量和數(shù)組

主要介紹兩種最重要的標(biāo)準(zhǔn)庫(kù)類(lèi)型:string和vector。
string表示可變長(zhǎng)的字符序列。
vector存放的是某種給定類(lèi)型對(duì)象的可變長(zhǎng)序列。

1 標(biāo)準(zhǔn)庫(kù)類(lèi)型string

#include <string>
using std::string;

1.1 定義和初始化string類(lèi)型

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ù)類(lèi)型是string::size_type類(lèi)型,所以需要在使用前面加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語(yǔ)句

string str("some string");
for(auto c: str) cout << c << endl;
for(auto &c: s) c = toupper(c);

2 標(biāo)準(zhǔn)庫(kù)類(lèi)型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開(kāi)始計(jì)起,下標(biāo)的類(lèi)型是相應(yīng)的size_type類(lèi)型。

3 迭代器介紹

類(lèi)似于指針類(lèi)型,迭代器也提供了對(duì)對(duì)象的間接訪問(wèn)。就迭代器而言,其對(duì)象是容器中的元素或者string對(duì)象中的字符。使用迭代器可以訪問(wèn)某個(gè)元素,迭代器也能從一個(gè)元素移動(dòng)到另一個(gè)元素。迭代器有有效和無(wú)效之分,這一點(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);

迭代器類(lèi)型

vector<int>::iterator it; // it 能讀寫(xiě)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è)的迭代器,其類(lèi)型名為difference_type的帶符號(hào)整數(shù)。

4 數(shù)組

在使用數(shù)組下標(biāo)的時(shí)候,通常將其定義為size_t類(lèi)型。在cstddef頭文件中定義了size_t類(lèi)型。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容