由于list底层是采用双向循环链表实现的,因此,list的迭代器不能向vector迭代器一样进行随机访问,list的迭代器类型是Bidirerctional Iterators,而STL提供的算法sort()只接受RamdonAccessIterator,所以list不能使用STL提供的算法sort(),必须用list自己的成员函数sort()。
template <class T, class Alloc>
void list<T, Alloc>::sort()
{
if(node->next == node || link_type(node->next)->next == node)
return;
list<T, Alloc> carry;
list<T, Alloc> counter[64];
int fill = 0;
while(!empty()) {
carry.splice(carry.begin(), *this, begin());
int i = 0;
while(i < fill && !counter[i].empty()) {
counter[i].merge(carry);
carry.swap(counter[i++]);
}
carry.swap(counter[i]);
if(i == fill) ++fill;
}
for(int i = 1; i < fill; ++i)
counter[i].merge(counter[i-1]);
swap(counter[fill-1]);
}