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类型大笑







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值