頻道欄目
首頁 > 程序開發 > 軟件開發 > C++ > 正文
C++基本語言-字符串string、向量vector和數組實例介紹
2018-07-28 16:17:40         來源:weixu1999的博客  
收藏   我要投稿

第二章介紹內置類型,本章介紹抽象數據類型庫。 

- 其中string和vector是兩種最重要的標準庫類型,前者支持可變長字符串,后者表示可變長的集合。 

- 還有一種標準庫類型是迭代器,它是string和vector的配套類型,常被用于訪問string中的字符和vector中的元素。

第三章 字符串、向量和數組

頭文件不應包含using聲明。

標準庫類型string

#include <string>

using std::string

初始化string

直接初始化(direct initialization)

拷貝初始化(copy initialization):使用等號 

string s1;

string s2(s1);

string s2 = s2;

string s3("hiya");

string s3 = "hiya";

string s4(10, 'c'); //s4的內容是cccccccccc

string對象上的操作

1. cout << s

2. cin >> s         //將string對象讀入s,遇到空白停止

3. getline(is, s)   //從輸入流is中讀取一行賦給s(換行符被讀取了,但被丟棄而沒有賦給s),返回is

4. s.empty()        //s為空返回true,否則返回false

5. s.size()

6. s[n]             //返回s中第n個字符的引用,位置n從0計起          

7. s1 + s2          //返回s1和s2連接后的結果

8. s1 = s2

9. s1 == s2

10. s1 != s2

11. <, <=, >, >=

邏輯非運算符(。

string::size_type類型:s.size()的返回值類型,是string類的配套類型。它是一個無符號類型的值,能夠存放下任何string對象的大小。

處理string對象中的字符

cctype頭文件:對單個字符的判斷或處理的函數

isupper(c)      //c是大寫字母時為真

islower(c)

tolower(c)      //如果c是大寫字母,則輸出對于的小寫字母;否則原樣輸出

toupper(c)

isalpha(c)      //c是字母時為真

isdigit(c)      //c是數字時為真

isalnum(c)      //c是字母或數字時為真

ispunct(c)      //c是標點符號時為真

isspace(c)      //c是空白時為真(即c是空格、橫向制表符、縱向制表符、回車符、換行符、進紙符的一種)

iscntrl(c)      //c是控制字符時為真

isgraph(c)      //c不是空格但可打印時為真

isprint(c)      //c是可打印字符時為真(即c是空格或具有可視形式)

isxdigit(c)     //十六進制數

使用C++版本的C標準庫頭文件,形如name.h,C++++中這些文件命名為cname,內容一樣,且頭文件cname中定義的名字從屬于命名空間std。

范圍for(range for)語句

for (declaration : expression)

    statement

例如:

string str("some string");

//每行輸出str中的一個字符

for(auto c : str)

    cout << c <<endl;

標準庫類型vector

vector是一個類模板(class template)。vector表示對象的集合,其中所有對象的類型都相同。集合中的每個對象都有一個與之對應的索引,索引用于訪問對象。vector也常被稱為容器(container).

定義和初始化vector對象

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...}

列表初始化vector對象

vector<string> articles = {"a", "an", "the"};

1

向vector對象中添加元素

push_back:把一個值當成vector對象的尾元素“壓到(push)”vector對象的“尾端(back)”。 

vector<int> v2;

for(int i=0; i != 100; ++1)

    v2.push_back(i);

運行時才知道vector對象中確切的個數:

string word;

vector<string> text;

while (cin >> word) {

    text.push_back(word);

}

vector對象能高效增長:vector能在運行時高效快速地添加元素。

如果循環體內包含有向vector對象添加元素的語句,則不能使用++范圍for++循環。

其他vector操作

v.empty()

v.size()

v.push_back(t)

v[n]        //返回v中第n個位置上元素的引用

v1 = v2

v1 = {a,b,c...}

v1 == v2

v1 != v2

<, <=, >, >=

迭代器iterator

一種通用機制:實現使用下標運算符訪問string對象的字符或vector對象的元素。

類似指針類型,提供了對對象的間接訪問。

begin和end成員

//由編譯器決定b、e的類型

//b表示v的第一個元素,e表示v尾元素的下一個元素

auto b = v.begin(), e = v.end();    //b、e類型相同

end成員返回的迭代器常被稱作尾后迭代器(off-the-end iterator),或者簡稱尾迭代器。

如果容器為空,則begin和end返回的都是尾后迭代器。

標準容器迭代器運算符

*iter           返回迭代器iter所指元素的引用

iter->men       解引用iter并獲取鈣元素的名為mem的成員,等價于(*iter).mem

++iter

--iter

iter1 == iter2

iter1 != iter2

//將字符串首字母改成大寫

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);

#### 迭代器類型

擁有迭代器的標準庫使用iterator和const_iterator來表示迭代器的類型:

vector<int>::iterator it;           //it能讀寫vector<int>中的元素

string::iterator it2;               //it2能讀寫string對象中的字符

vector<int>::const_iterator it3;    //it3只能讀元素,不能寫元素

string::const_iterator it4;         //it4只能讀字符,不能寫字符

點擊復制鏈接 與好友分享!回本站首頁
上一篇:用C語言、C++編寫一個迷宮游戲(代碼實例)
下一篇:關于C++中new、operator new和placement new的區別詳解
相關文章
圖文推薦
點擊排行

關于我們 | 聯系我們 | 廣告服務 | 投資合作 | 版權申明 | 在線幫助 | 網站地圖 | 作品發布 | Vip技術培訓 | 舉報中心

版權所有: 紅黑聯盟--致力于做實用的IT技術學習網站

加拿大28火车判定方法