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