c++字串、向量和陣列
前一段時間忙著趕專案進度,現在就接著之前學習的內容繼續學習。
1、c++的內建型別(數字和字元等),體現了大多數計算機硬體本身具備的能力。
2、位於標頭檔案中的程式碼一般不用using進行宣告,因為標頭檔案的內容會拷貝到所有引用它的檔案中去。
3、關於直接初始化和拷貝初始化:
拷貝初始化:使用等號進行初始化即為拷貝初始化,例如:string s5 = "everyone can be a better man ";
直接初始化:不使用等號進行初始化即為直接初始化,例如:string s5("everyone can be a better man");
建議使用的時候儘量使用直接初始化,因為拷貝初始化會建立一個臨時物件。
4、使用cin>>對string物件執行讀取操作時,會自動忽略遇到的空白(空格符、換行符、製表符)並從第一個真正的的字元開始讀起,直到遇見下一處空白。:
//example
int main()
{
string s;
cin>>s;
cout << s << endl ;//如果程式輸入的是"hello word!"輸出為"hello"
return 0;
}
5、使用getline讀取輸入:getline函式的引數是一個輸入流和一個string物件,函式從給定的輸入流中讀取內容直到遇到換行符為止。
int main()
{
string line;
while (getline(cin,line))
cout << line << endl;
return 0;
}
6、string::size_type型別:string物件包含的字元個數,他是一個無符號型別的值能夠存放下任何string物件的大小。
7、如果一條表示式中已經有在用.size()函數了,就不要使用int了。避免混用int和unsigned。
8、關於兩個string物件的對比:
- 如果兩個string物件的長度不同,而且較短的string物件的每個字元都與較長string物件對應位置的字元相同,那麼就說較短的string物件小於較長的物件。
- 如果兩個string物件對應位置的字元都不相同,則比較第一對相異字元。
9、當把string物件和字元字面值混在一條語句中使用時,要確保+號的兩邊至少有一個是string物件。
10、cctypet標頭檔案中用來處理string物件的方法:
11、c++在引用c中的標頭檔案時將.h去掉,再在前面加上c。例如:ctype.h->cctype。
12、使用範圍for迴圈可以遍歷string物件中的每一個元素。如果想改變string中的元素要把迴圈變數定義成引用型別。
//example
string str("some string");
for (auto c:str)
cout << c << endl;
13、string物件可以使用下標運算子遍歷其中的每一個元素[i],使用時務必確保下標的有效。
//使用下標遍歷string物件中元素
string s("everyone can be a better one");
for(int i =0;i<(s.size()-1);i++)
{
cout << s[i];//可以實現輸出string中的每一個元素
}
14、vector可以容納絕大多數型別的物件作為其元素,但是不能為引用(引用不是物件沒有分配記憶體)
15、c++提供的幾種初始化方式:
(1)、拷貝初始化;(2)、類內初始化;(3)、列表初始化。
16、如果迴圈體內有向vector物件新增元素的語句,不能使用範圍for迴圈。
17、要使用vector的size_type,需首先定義它是由那種型別定義的。
//example
vector <int>::size_type;
18、有關陣列:
(1)陣列的維數編譯的時候應該是一個常數,函式內部定義陣列預設初始化會使他含有未定義的值。
(2)初始化字元陣列要考慮最有一個是'\0'
(3)陣列不支援用另外一個數組拷貝和賦值
//關於複雜陣列的初始化
int *ptrs[10];//一個包含10個整形指標的陣列
int &refs[10];//錯誤:不存在包含引用的陣列(因為引用不是物件)
int (*parray)[10]; //指向陣列的指標
int (&refs)[10];//指向陣列的引用