为什么std :: list <int>不可排序?

Gho*_*ica 7 c++ list c++-concepts c++20

我刚刚阅读了一篇关于C++概念的(印刷版,德语)文章(C++ 20).

本文使用以下Sortable概念给出了函数模板的示例:

template<typename Cont>
  requires Sortable<Cont>()
void sort(Cont& container) { ... }
Run Code Online (Sandbox Code Playgroud)

它声称编译器会拒绝以下代码:

std::list<int> lst = { 1, 7, 5, 12 };
sort(lst);
Run Code Online (Sandbox Code Playgroud)

有一个错误:

错误:lst不是带<的随机访问容器

假设文章是正确的-到底为什么是一个列表INT值不排序?对我来说,整数的列表就像是在考虑"可排序"的东西时的典型例子?!

不,我不是在询问std :: sort.我在问:为什么Sortable 概念不起作用std::list<int>

Naw*_*waz 7

不,我不是在询问std :: sort.我在问:为什么概念Sortable不能用于std :: list?

嗯,这一切都取决于你如何定义可排序的概念.因此,在您正在阅读的文本的上下文中,可能假设Sortable容器必须在random-access-iterator上运行 - std::sort例如,需要一对随机访问迭代器; 它不能对容器的元素进行排序,比如说std::list,它不支持random-access-iterator.

然而,这并不能意味着你不能定义自己的概念,说FlexySortable(与算法一起flexy_sort),可能在运行非随机访问迭代器为好.本文简单地给出一个概念例子来解释关于概念如何帮助您直接在代码中表达您的意图和假设的一般概念,编译器可以通过执行谓词(即概念)来验证.

  • 很有道理.比其他人提出的各种"重复"更有意义. (2认同)