1. OOP(Object-Oriented programming)
在OOP中,企圖將datas和methods關(guān)聯(lián)在一起冠骄,如下面的stl_list.h部分代碼所示:
template<class T, class Alloc = alloc>
class list{
...
protected:
link_type node; // datas部分
...
public:
void sort(); // methods部分
};
為什么list不能使用::sort()排序伪煤?
全局的sort()
中需要容器有隨機(jī)存取的性質(zhì),而list中沒有這種性質(zhì)凛辣,因此需要使用自己的sort()
抱既。
在標(biāo)準(zhǔn)庫中,容器自己有
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()
函數(shù),當(dāng)需要將容器vector和deque這兩個(gè)容器進(jìn)行排序時(shí)蝗敢,需要調(diào)用algorithms
中的sort()
函數(shù)捷泞。
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可以分開開發(fā),之間用Iterator連同即可寿谴;
-
Algorithms通過Iterator確定操作范圍锁右,并通過Iterator取用Container元素。
關(guān)系圖
所謂的algorithms讶泰,其內(nèi)最終涉及元素本身的操作無非就是比大小咏瑟,不同比較大小的規(guī)則,調(diào)用的函數(shù)不一樣痪署,輸出結(jié)果也不一樣码泞。