【发布时间】:2023-03-28 00:04:01
【问题描述】:
我已经将 std::sort 用于数组,现在我想将它用于链表 我可以将 std::sort 用于链表吗?如果可以的话,我该怎么用呢。
【问题讨论】:
我已经将 std::sort 用于数组,现在我想将它用于链表 我可以将 std::sort 用于链表吗?如果可以的话,我该怎么用呢。
【问题讨论】:
你不能,因为std::sort 需要随机访问迭代器,而std::list 只提供双向迭代器。请改用std::list::sort。
【讨论】:
您不能将标准算法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
【讨论】: