C++88個注意點子之41~50

41.下面是我遇到最蛋疼的編碼問題,各位朋友想必也被編碼問題弄的蛋疼過吧。下面我們總結一下各種編碼規範之間的關係。

對於編碼規範,有unicode和GBK,GB2312等。unicode是現在最流行的編碼標準。而GB*等是專門針對漢子的國際編碼標準。這些編碼方法只是確定產生的編碼數,是純數學方面的問題,和具體計算機關係不大,這些標準並不確定如何保存這些編碼以及如何傳輸等內容。而我們常看到的utf-8,utf-16這些編碼規範是專門針對unicode編碼而制定的存儲和傳輸編碼方式。換句話說就是utf-8和utf-16是規定如何保存這些編碼在我們的計算機中的,具體什麼字符有幾個字節。比如utf-8編碼中對於字符可能會用一個字節存儲,也可能用二個字節和三個字節存儲,對於英文字符用一個字節存儲,與ASCII碼兼容,對於漢字用三個字節存儲,而utf-16中一個字符至少用2個字節存儲,比如漢字就是兩個字節,英文也是兩個字節,所以utf-16與ASCII碼是不兼容的。對於utf-8和utf-16具體的編碼方法這裏就不展開論述了,有興趣的朋友可以自行查閱文檔。

這樣我們就可以理解,對於文章中中文多,則用utf-16好,節約空間。

對於文章中英文多,用utf-8好,節約空間。


42. 因爲IO對象不可複製或賦值,(但是可以引用)

所以vector容器類型中元素是不能有流對象的


43. 對於Int型,及long型等存儲字節大於1的類型,在用指針操作時一定要注意大小端問題。

大端模式是將數據的高位放在內存地址的低地址處。

小端模式是將數據的地位放在內存地址的高地址處。

比如int a = 0x080705;

對於小端模式,低地址--->高地址:05 07 08

對於大端模式,低地址--->高地址:08 07 05


44. fstream與stringstream的應用。

這與C語言中的不一樣。FILE *fp;   --->C中的文件指針

stringstream strm(s)中s必須是string類型。

strm.str(s)中的s爲賦值副本。


45. 要正確理解指針數組和數組指針。

int (*p)[16]; p首先是指針,指向一個int[16]的數組,所以是數組指針

int *p[16]; p是一個數組,裏面存放着int*的指針。

char *words[] = {"red", "black", "blue"};
int words_count = sizeof(words) / sizeof(char *);
words是一個指針數組。sizeof(words)是3×sizeof(char *);


46. 接受容器大小做形參的構造函數只適用於順序容器,關聯容器不支持這種初始化。


47.vector與deque的迭代器可支持增減固定值,也支持<= ,>等比較操作,而list則只能自增,自減,及不等於和等於比較。


48. 對於list和deque,還提供push_front()操作,對於pust_back()而言list, deque, vector都適用。

c[n]與c.at(n)都只適用於vector與deque容器,不適用於list容器。


49. c.assign(b, e), 將c中元素全部刪除,將b到e的元素複製給c, b, e不一定爲c類型迭代器。


50. string類型可以有函數直接與char str[]比較,同時,string類型中有find函數,assign類型,compare函數, substr函數,insert函數。對於string類型可以說是各種語言的一種特色類型,每種語言對string類型的實現方式都有不同,對於string類型的解讀可以幫助我們更好的理解一門新語言。等有空一定寫一篇文章專門分析和比較c++與java中string類型大笑







發佈了65 篇原創文章 · 獲贊 75 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章