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类型。