为什么在对数组进行排序时要强调std?

Xav*_*avi 0 c++ arrays sorting

为什么我们在通过 begin 和 end 迭代器对数组进行排序时必须放置 std,而向量、列表等情况并非如此?

例子:

std::sort( std::begin(array), std::end(array), [](int a,int b) { return a>b;} );
Run Code Online (Sandbox Code Playgroud)

Cal*_*eth 6

这是由于参数依赖查找造成的。标准不保证vector迭代器允许您省略,但它是一个相当常见的实现细节。std::

如果 的结果类型std::vector::begin()是 中定义的类类型std,则将sort(vec.begin(), vec.end())查找stdforsort以及全局命名空间,并找到std::sort(全局命名空间中没有任何内容)。

的结果std::begin(array)是一个指针,它不是 from 的类型std,因此sort(std::begin(array), std::end(array))只在全局命名空间中查找,并且在那里找不到任何函数。

  • @appleapple 如果 `array` 是一个 `[]` 数组,它会执行,如果它是一个 `std::array` 则不会 (2认同)