C 筆記 字串 向量和陣列

2021-08-29 02:27:48 字數 3560 閱讀 6420

using宣告可以使程式無須專門的字首使用名字。

using namespace :: name;

using std :: cin; std :: cout; //用到的每個名字都必須有自己的宣告語句,而且每句話都得以分號結束

標頭檔案不應包含using宣告。

定義和初始化string物件c

string s1;      //預設初始畫,s1是空字串

string s2 = s1;

string s3("value");

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

如果是執行(=)實際上是拷貝初始化,編譯器把等號右側初始值拷貝到新建立的物件中,如果不用等號,則是直接初始化。

string操作

os << s		將s寫到輸出流os當中,返回os

is >> s 從is中讀取字串賦給s,字串以空白符分隔,返回is

getline(is, s) 從is中讀取一行賦給s,返回is

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

s.size() 返回s中字元的個數

s[n] 返回s中第n個字元的引用,位置從0開始計算

s1 + s2 返回s1和s2連線後的結果

s1 == s2 如果s1和s2中所含字元完全一樣,則相等,對大小寫敏感

<, <=, >, >= 利用字元在字典順序比較,對大小寫敏感,比較的是第一對相異字元

.length()和.size()都是遇到『\0』結束,不包括』\0』;

sizeof()統計字串所佔空間大小,包含『\0』, 只對字元陣列有效,若要使用字串,必須用字面值。

strlen必須將str轉化為c語言使用: strlen(str.c_str())

string執行讀取操作時,會忽略開頭的空白,並讀到下一處空白。若輸入「 hello world 」,則實際為「hello」

讀取未知數量的string

int main()

遇到檔案結束標記或非法輸入結束。

保留字串中的空白符,則使用getline,getline讀取到換行符為止(讀取時包含換行符,但存入string時不存換行符),觸發getline函式返回的換行符實際上被丟棄了

int main()

size函式返回的是乙個string :: size_type型別的值,是乙個無符號型別的值,且能足夠存下任何string物件的大小。

如果一條表示式中已經有了size函式盡量不使用int,以避免混用int和unsigned可能出現的問題。

注:c++中字串字面值並不是標準庫型別string的物件。

cctype標頭檔案的函式

isalnum(c)		當c是字母或數字為真

isalpha(c) 當c是字母為真

iscntrl(c) 當c是控制字元時為真

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

isgraph(c) 當c不是空格但可列印時為真

islower(c) 當c小寫為真

isprint(c) 當c可列印(即c是空格或具有可視形式)為真

ispunct(c) 當c是標點符號為真

isspace(c) 當c為空白(即空格、橫向製表符、回車符、換行符、進紙符)為真

issupper(c) 當c大寫為真

isxdigit(c) 當c為十六進製制為真

tolower(c) 輸出小寫

toupper(c) 輸出大寫

vector初始化

vectorv1

vectorv2(v1) / vectorv2 = v1

vectorv3(n, val) v3包含了n個重複元素,值都為val

c+11新增列表初始化

vector articles = ;
引用不可以成為vector的元素,因為其不是物件。

只能使用直接初始化,不可以使用拷貝初始化(vector之間的拷貝是可行的,但要保證型別相同)

迭代器通過begin返回指向第乙個元素/字元的迭代器。

end返回指向容器/string物件「尾元素的下一位置」的迭代器,沒有實際含義,僅是個標記,表示已處理完容易中所有元素。

若容器為空,則begin和end返回的是同乙個迭代器,都是尾後迭代器。

迭代器的運算子

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

iter->mem 解引用,等價於 (*iter).mem

++iter 指向容器下一元素

--iter 指向上一元素

iter1 == iter2 若兩個迭代器指示的是同乙個元素或都是同一容器的尾後迭代器,則相等

迭代器型別

vectorv;

const vectorcv;

auto it1 = v.begin(); //it1的型別是vector::iterator

auto it2 = cv.begin(); //it2的型別是vector::const_iterator

c+11新引入,cbegin和cend返回的是vector::const_iterator,用於唯讀不寫的操作物件。

如果迭代器指向的容器位置在另乙個迭代器所指位置之前,則說前者小於後者。

迭代器和乙個整數值相加(相減),返回值是向前(向後)移動了若干位置的迭代器。

兩個迭代器的距離型別是difference_type

陣列陣列中的維度必須是常量表示式。拷貝和複製陣列不允許。

string sa[10];		//sa陣列為空

int ia[10]; //ia陣列含有10個整數,皆為0

int main()

函式體內的區域性變數分配在棧裡,定義變數只是給了它乙個臨時的位址,而位址中原來是有資料存在的,是未知的不確定的

c+11新引入,begin/end函式,定義在iterator標頭檔案中

int ia = ;

int *beg = begin(ia); //指向ia首元素

int *last = end(ia); //指向arr尾元素的下一位置的指標

c風格字串的函式

strlen(p) //返回p長度,不計入空字元

strcmp(p1,p2) //如果p1==p2,返回0;如果p1>p2,返回正值;如果p1比較字串

string s1 = /..../

string s2 = /.../

if(s1 < s2) //可比較

const char ca1 = /..../

const chat ca2 = /.../

if(ca1使用範圍for語句處理多維陣列

C 字串 向量和陣列筆記

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

C 筆記( 字串 向量和陣列)

標準庫型別string include 直接初始化 string s1 hiya 拷貝初始化 string s2 hiya int main s.empty 若s為空串,則返回true,否則返回false s.size 返回s中字元的個數 s n 返回s中位置為n的字元,位置從0開始 s1 s2 將...

C 字串 向量和陣列

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