使用std :: sort对C ++中的链表进行排序

时间:2014-06-02 04:05:13

标签: c++ sorting

我已经使用了std :: sort for array,现在我想将它用于链表 我可以使用std :: sort作为链表。如果它能够,我该如何使用它。

2 个答案:

答案 0 :(得分:6)

你不能,因为std::sort需要随机访问迭代器,而std::list只提供双向迭代器。请改用std::list::sort

答案 1 :(得分:2)

您不能对容器std::sort使用标准算法std::list,因为算法使用random access iterators而容器std::list只有bidirectional iterator

但是std::list(和std::forward_list)有自己的方法sort

void sort();
template <class Compare> void sort(Compare comp);

例如

#include <iostream>
#include <list>
#include <cstdlib>
#include <ctime>
#include <algorithm>

int main() 
{
    const size_t N = 10;
    std::list<int> l( N );

    std::srand( ( unsigned )std::time( 0 ) );

    std::generate( l.begin(), l.end(), []{ return std::rand() % N; } );

    for ( int x : l ) std::cout << x <<' ';
    std::cout << std::endl;

    l.sort();

    for ( int x : l ) std::cout << x <<' ';
    std::cout << std::endl;

    return 0;
}

输出

3 6 7 5 3 5 6 2 9 1 
1 2 3 3 5 5 6 6 7 9