C 系列 字串 向量(2)

2021-10-23 06:04:19 字數 4055 閱讀 3575

string 和 vector是兩種標準庫型別,前者支援可變長字串,後者支援可變長的集合。內建陣列是更基礎的型別,string和vector是對它的某種抽象。

呼叫string庫:

#include

using std::string

string定義的5種形式:

#include

#include

using

namespace std;

intmain()

結果:

hello

hello

aaaaa

aaaaa

hello world!

string操作操作

含義getline(is,s)

從is中讀取一行賦給s

s.empty()

s為空返回true,否則返回false

s.size()

s字元個數

s[n]

索引為n的字元

s1+ s2

s1和s2連線後的結果

s1 == s2

判斷是否相等

s1 != s2

判斷是否不相等

<,<=,>,>=

字典序的比較

讀寫 string 物件

讀取時,string自動忽略開頭的空白(空格符,換行符,製表符等),從真正的字元開始到遇到下一次的空白為止。

#include

#include

using

namespace std;

intmain()

結果:

hello world

hello

讀取未知數量的 string 物件

輸入流一直在讀取。

#include

#include

using

namespace std;

intmain()

}

結果:

hello world we are champion// 輸入

hello

world

weare

champion

使用getline 讀取一整行

這樣可以讀取到空格符了。

#include

#include

using

namespace std;

intmain()

return0;

}

endl結束當前行並重新整理顯示緩衝區。

結果:

we are champion//輸入

we are champion

are you ok//輸出

are you ok

vector表示物件的集合,vector也稱為容器。可以認為是動態陣列,如果儲存的資料比記憶體大時,會重新分配記憶體(原記憶體的1.5倍),並複製原來的資料到新記憶體,原記憶體釋放,實現動態增加。這和python的list比較相似。

#include

using std::vector;

vector 5種初始化方法:

#include

#include

using

namespace std;

void

print_vector

(vector<

auto

> vec)

cout << endl;

}int

main()

; vector<

int> v2_copy = v2;

vector<

int> v3=

;print_vector

(v1)

;print_vector

(v1_copy)

;print_vector

(v2)

;print_vector

(v2_copy)

;print_vector

(v3)

;}

結果:

10

1010

1010

1010

1010101

2345

1234

5123

45

如果單純宣告定義vectorvec,則是預設初始化,vec不包含任何元素。

編譯不過的話,需要把編譯器的編譯標準設定為iso c++11.dev c++ 的在工具-編譯器選項-**生成-語言標準。

如果遍歷的過程,希望對vector的值進行改變:

for

(auto

&v : vec)

vector的操作操作

含義push_back()

新增元素

v.empty()

判斷是否含有元素

v.size()

含有元素的個數

v[n]

取索引n上的值

v1 = v2

用v2中的元素替換 v1的元素(容器型別相同)

v1 == v2

判斷是否相等

v1 != v2

判斷是否不相等

<,<=,>,>=

字典順序進行比較

vector 的訪問:

#include

#include

using

namespace std;

void

print_vector

(vector<

auto

> vec)

cout << endl;

}int

main()

;for

(auto

&i : v)

print_vector

(v);

}

陣列的大小確定不變。

陣列的初始化:

#include

using

namespace std;

intmain()

; string s[5]

=;for(

auto i:a)

}

結果:

012

00

指標與陣列:

#include

using

namespace std;

intmain()

;int

*ip = arr;

// 等價於int *p = &arr[0]

int*ip2 = ip+2;

//ip2指向arr[2]

cout <<

*ip << endl;

cout <<

*ip2 << endl;

}

結果:

0

2

多維陣列:

#include

using

namespace std;

intmain()

,,};

for(

auto

&row : arr)

}}

結果:

012

345

參考:

vector記憶體增長方式;

C 字串 向量和陣列

vector物件 以及string物件 的下標運算子可用於訪問已存在的元素,而不能用於新增元素。只能對確知已存在的元素執行下標操作。所有標準庫容器都可以使用迭代器,string物件不屬於容器型別,但是支援很多與容器型別類似的操作。const vectorcv auto it cv.begin it ...

C 字串 向量和陣列筆記

標頭檔案中一般來說不應包含using宣告 string size 返回無符號整數,型別是size type s.size n為負值int型,會把n自動轉換成無符號型別,n n mod 256 c風格的字串 c風格的字串存放在字元陣列中並以空字元結束 null terminated,0 char ca...

C 筆記 字串 向量和陣列

using宣告可以使程式無須專門的字首使用名字。using namespace name using std cin std cout 用到的每個名字都必須有自己的宣告語句,而且每句話都得以分號結束標頭檔案不應包含using宣告。定義和初始化string物件c string s1 預設初始畫,s1是...