平均情况下快速排序的时间复杂度是nlgn,最坏情况是n^2,但通过随机算法可以避免最坏情况。由于递归调用,快排的空间复杂度是lgn。
C++手稿:数组传参与降级行为总结
数组名在多数情况下会被降级为首元素的指针,但数组不是指针!多维数组可以视作一个普通数组,只不过元素类型也是数组。多维数组也存在降级行为。
Effective C++ 55:熟悉一下 Boost
Boost是一个C++开发者的社区,作为C++标准的试验场,收容了很多高质量、开源的、跨平台、独立于编译器的C++库,包括许多TR1组件的实现。
Effective C++ 54:熟悉一下标准库,比如 TR1
标准C++库是由STL, iostream, 本地化,C99组成的。TR1添加了智能指针、通用函数指针、哈希容器、正则表达式以及其他10个组件。 TR1在是一个标准(standard),为了使用TR1你需要一个TR1的实现(implementation),Boost就是一个很好的TR1实现。
Effective C++ 53:注意编译警告
请严肃对待所有warning,要追求最高warning级别的warning-free代码;但不要依赖于warning,可能换个编译器有些warning就不在了。
Effective C++ 52:写了 placement new 就要写 placement delete
new和delete是要成对的,因为当构造函数抛出异常时用户无法得到对象指针,因而delete的责任在于C++运行时。 运行时需要找到匹配的delete并进行调用。因此当我们编写了"placement new"时,也应当编写对应的"placement delete", 否则会引起内存泄露。在编写自定义new和delete时,还要避免不小心隐藏它们的正常版本。
JavaScript 内置对象与原型链结构
JavaScript是一门直译式脚本语言,是一种动态类型、基于原型的语言。 JavaScript的灵活性不亚于C++,你可以使用JavaScript尝试不同的程序设计范型。 比如函数式编程、指令式或过程式编程、以及基于原型的面向对象编程。
不同于Java、C#等面向对象语言,JavaScript采用基于原型的继承方式。 本文便来介绍使用JavaScript进行面向对象编程的核心概念:原型链。