1. OOP(Object-Oriented programming)
在OOP中,企图将datas和methods关联在一起,如下面的stl_list.h部分代码所示:
template<class T, class Alloc = alloc>
class list{
...
protected:
link_type node; // datas部分
...
public:
void sort(); // methods部分
};
为什么list不能使用::sort()排序?
全局的sort()
中需要容器有随机存取的性质,而list中没有这种性质,因此需要使用自己的sort()
。
在标准库中,容器自己有
sort()
就需要用自己的sort()
,而不用全局的sort()
.
2. GP(Generic Programming)
在GP中,将datas和methods分开。如下代码所示:
stl_vector.h
template <class T, class Alloc = alloc>
class vector {
...
}
template <class T, class Alloc = alloc, size_t BufSiz = 0>
class deque {
...
}
在stl_vector.h
和stl_deque.h
中找不到sort()
函数,当需要将容器vector和deque这两个容器进行排序时,需要调用algorithms
中的sort()
函数。
template <class RandomAccessIterator>
inline void sort(RandomAccessIterator first, RandomAccessIterator last) {
...
}
template <class RandomAccessIterator, class Compare>
inline void sort(RandomAccessIterator first, RandomAccessIterator last,
Compare comp) {
...
}
采用GP的好处:
- Containers和Algorithms可以分开开发,之间用Iterator连同即可;
-
Algorithms通过Iterator确定操作范围,并通过Iterator取用Container元素。
关系图
所谓的algorithms,其内最终涉及元素本身的操作无非就是比大小,不同比较大小的规则,调用的函数不一样,输出结果也不一样。
网友评论