[STL源码剖析] list中的sort()函数

由于list底层是采用双向循环链表实现的,因此,list的迭代器不能向vector迭代器一样进行随机访问,list的迭代器类型是Bidirerctional Iterators,而STL提供的算法sort()只接受RamdonAccessIterator,所以list不能使用STL提供的算法sort(),必须用list自己的成员函数sort()。

template 
void list::sort()
{
    if(node->next == node || link_type(node->next)->next == node)
        return;

    list carry;
    list 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]);
}

你可能感兴趣的:(C++,c++,STL)