C++
C++
目录
OOP vs GP
比较
数据和方法的区别
OOP的目的是将数据和方法绑定在一起
- 例如对
std::list容器进行排序要调用std::list::sort方法 
- 例如对
 GP的目的是将数据和方法分离开来
- 例如对
std::vector容器进行排序要调用std::sort方法 
- 例如对
 
OOP(Object-Oriented Programming)
OOP企图将 datas 和 methods 关联在一起
类定义
/* list类 */
template <class T, class Alloc=alloc>
class list {
    //...
    void sort();
};- Q:引申问题:为什么list不能用
::sort排序 - A:
std::sort的实现使用了随机访问,而list不能随机访问,不能用::sort排序 
GP(Generic Programming)
标准库使用GP编程
GP却是将 datas 和 methods 分开来
类定义(这两个容器都提供 RandomAccessIterator 随机遍历器)
/* vector类 */
template <class T, class Alloc=alloc>
class vector {
    //...
    //(没有sort方法)
};
/* deque类 */
template <class T, class Alloc=alloc, size_t BufSiz=0>
class deque {
    //...
    //(没有sort方法)
};算法 Algorithms(排序)
template<typename _RandomAccessIterator>
inline void sort(_RandomAccessIterator __first, _RandomAccessIterator __last) {
    // std::__sort(__first, __last, __gnu_cxx::__ops::__iter_less_iter());
}
template<typename _RandomAccessIterator, typename _Compare>
inline void sort(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp) {
    if (__first != __last) {
        std::__introsort_loop(__first, __last,
                              std::__lg(__last - __first) * 2,		// 对iterator进行减运算,std::list的iterator没有实现该运算
                              __comp);
        std::__final_insertion_sort(__first, __last, __comp);
    }
}GP 补充
好处
- Containers 和 Algorithms 团队可以各自开发,其间以Iterator沟通即可
 - Algorithms 通过 Iterator 确定操作范围,并通过Iterator取用Container元素
 
组件结构
图示
复习下六组件结构
操作符重载 vs 模板(泛化、全特化、偏特化)

Operator Overloading 操作符重载
略
Templates 模板
略
链接到当前文件 0
没有文件链接到当前文件