前一段時間忙着趕項目進度,現在就接着之前學習的内容繼續學習。
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對象的方法:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TPB9EMNpWT0UkaNBDOsJGcohVYsR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZwpmLxQTN5IDOwEjMxATMxgTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
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];//指向數組的引用
19、使用auto和decltype對數組操作傳回的對象不同。
int ia [] = {3,3,3,3,33};
auto ia2(ia) ; //傳回指向第一個元素的指針
decltype(ia) ia3;//傳回一個數組
20、數組的begin和end(基于c++11标準)
//基于c++11
int ia [] = {2,2,2,2,2};
int *beg = begin(ia);
int * end = end(ia);
21、隻要指針指向數組中的元素就可以執行下标運算通路元素,内置類型下标運算所用的索引值不是無符号類型的。
22、c風格字元串以'\0'結尾,使用數組時真正用的是指向數組首元素的的指針。
23、指針沒有定義加法運算,減法限于指向同一個數組
24、可以使用數組初始化vector
int int_arr[]={2,3,4,5,6,7};
vector<int>ivec(begin(int_arr),end(int_arr));
25、多元數組:
constexpr size_t rowCnt = 3, colCnt =4;
int ia[rowCnt][colCnt];
size_t cnt =0;
for (auto &row:ia)
for(auto & col:row)
{
col = cnt;
++cnt;
}
//使用範圍for循環處理多元數組時,除了最内層的循環外,替他循環的控制變量都應該是引用類型
26、緩沖區溢出:越界通路引起的錯誤。