问题
如果我们想给一个list
排序,无法使用C++
标准库中全局的sort
函数,而要使用list
自定义的sort
函数。
#include <list>
#include <iostream>
int main()
{
std::list<int> li = {
2, 3, 52, 10, -1, 2, 4 };
sort(li.begin(), li.end()); // 编译出错
li.sort(); // 编译执行正常
for (auto x : li) {
std::cout << x << std::endl; // 升序打印
}
return 0;
}
那为什么不能用全局sort
给list
排序呢?
分析
在cppreference
里查了一下,全局sort
的声明是这样的:
模板参数是RandomAccessIterator
,表明它接受的是随机访问迭代器,而list
迭代器的类型是BidirectionalIterator
类型的。
根据《STL源码剖析》里的内容,下面简单说一下调用函数是如何区分迭代器型别的。
迭代器型别
根据移动特性和实施操作,迭代器大概分为五种。详见【迭代器】迭代器相应型别