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

主要介紹兩種最重要的標(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類型包竹。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市籍凝,隨后出現(xiàn)的幾起案子周瞎,更是在濱河造成了極大的恐慌,老刑警劉巖饵蒂,帶你破解...
    沈念sama閱讀 221,888評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件声诸,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡退盯,警方通過查閱死者的電腦和手機(jī)彼乌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來渊迁,“玉大人慰照,你說我怎么就攤上這事×鹦啵” “怎么了毒租?”我有些...
    開封第一講書人閱讀 168,386評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)箱叁。 經(jīng)常有香客問我墅垮,道長(zhǎng)惕医,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,726評(píng)論 1 297
  • 正文 為了忘掉前任算色,我火速辦了婚禮曹锨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘剃允。我一直安慰自己沛简,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評(píng)論 6 397
  • 文/花漫 我一把揭開白布斥废。 她就那樣靜靜地躺著椒楣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪牡肉。 梳的紋絲不亂的頭發(fā)上捧灰,一...
    開封第一講書人閱讀 52,337評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音统锤,去河邊找鬼毛俏。 笑死,一個(gè)胖子當(dāng)著我的面吹牛饲窿,可吹牛的內(nèi)容都是我干的煌寇。 我是一名探鬼主播,決...
    沈念sama閱讀 40,902評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼逾雄,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼阀溶!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起鸦泳,我...
    開封第一講書人閱讀 39,807評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤银锻,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后做鹰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體击纬,經(jīng)...
    沈念sama閱讀 46,349評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評(píng)論 3 340
  • 正文 我和宋清朗相戀三年钾麸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了更振。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,567評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡喂走,死狀恐怖殃饿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情芋肠,我是刑警寧澤乎芳,帶...
    沈念sama閱讀 36,242評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響奈惑,放射性物質(zhì)發(fā)生泄漏吭净。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評(píng)論 3 334
  • 文/蒙蒙 一肴甸、第九天 我趴在偏房一處隱蔽的房頂上張望寂殉。 院中可真熱鬧,春花似錦原在、人聲如沸友扰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽村怪。三九已至,卻和暖如春浮庐,著一層夾襖步出監(jiān)牢的瞬間甚负,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工审残, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留梭域,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,995評(píng)論 3 377
  • 正文 我出身青樓搅轿,卻偏偏與公主長(zhǎng)得像病涨,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子介时,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容