之前看《C++ Primer Plus》第6版这本书后所做的笔记,先开始复习,整理出来。
1.C++的const比C语言#define更好的原因?
首先,它能够明确指定类型,有类型检查功能。
其次,可以使用C++的作用域规则将定义限制在特定的函数或文件中。
第三,可以将const用于更复杂的类型,比如数组和结构。
C语言中也有const,其与C++中const的区别是:一是作用域规则不同;另一个是,在C++中可以用const值来声明数组长度。
2.为什么说前缀++/--比后缀++/--的效率高?
对于内置类型和当代的编译器而言,这看似不是什么问题。然而,C++允许您针对类定义这些运算符,在这种情况下,用户这样定义前缀函数:将值加1,然后返回结果;但后缀版本首先复制一个副本,将其加1,然后将复制的副本返回。因此,对于类而言,前缀版本的效率比后缀版本高。
总之,对于内置类型,采用哪种格式不会有差别,但对于用户定义的类型,如果有用户定义的递增和递减运算符,则前缀格式的效率更高。
3.逗号运算符
到目前为止,逗号运算符最常见的用途是将两个或更多的表达式放到一个for循环表达式中。逗号运算符的特性有下面几个:
它确保先计算第一个表达式,然后计算第二个表达式;
i = 20, j = 2 * i; // i set to 20, then j set to 40逗号表达式的值是第二部分的值。例如,上面表达式的值为40。
在所有运算符中,逗号运算符的优先级是最低的。例如:
cats = 17, 240;
被解释为:
(cats = 17), 240;
也就是说,将cats设置为17,后面的240不起作用。如果是cats = (17, 240);那么cats就是240了。
4.快排中中值的选取:
将元素每5个一组,分别取中值。在n/5个中值里面找到中值,作为partition的pivot。
为什么*不每3个一组?保证pivot左边右边至少3n/10个元素,这样最差O(n)。
5.C++存储方案:C++三种,C++11四种
自动存储持续性