1.在头文件中,最好只定义确实需要的东西,如避免使用using声明,而是使用完全限定std::string,因为using会在每个include该文件中,进行声明
2.字符串字面值与string不是同一种类型
3.getline(cin,strTemp);读取一行文本,不包括换行符
4.string.size()返回长度为string::size_type类型,实现机器无关性,不要将返回值赋值给int类型
5.将str2赋值到str1的效率问题:首先将str1的内存释放掉,给str1分配足够存放str2的内存空间,将str2中所有字符复制到str1
6.string对象中对字符的处理,这些函数都在cctype.h中定义
isalnum(c) //c是字母或者数字
isalpha(c) //c是字母
iscntrl(c) //c是控制字符
isdigit(c) //c是数字
isgraph(c) //c不是空格,且可打印
islower(c) //判断是否小写
isprint(c) //判断是否可打印字符
ispunct(c) //判断是否标点符号
isspace(c) //判断是否空格
isupper(c) //判断是否大写
isxdigit(c) //判断是否是16进制数
tolower(c) //返回小写
toupper(c) //返回大写
7.虽然可以对vector预先分配内存,但更有效的方式是,先初始化一个空的vector,然后动态的增加元素
8.for(vector<int>::size_t ype ix = 0; ix != ivec.size();++i)
优先选用!=而不是<来编写循环条件,习惯在循环内每次调用size,防止动态增长,从而漏掉了某些元素,inline运行时代价比较小的
9.必须是已存在的元素,才能进行下标索引,vector下标操作不会添加任何元素
10.倾向于使用迭代器,而不是下标操作
11.vector<T>::const_iterator //an iterator that connot write elements
const vector<T>::iterator //an iterator whose value cannot change
12.标准库提供了bitset模板来进行对二进制位的操作,定义形式与vector类似,区别是,只提供长度,而不是类型
13.如果想要获取一个数的二进制表示,也可以用bitset对象