C++ 如果未对范围进行排序,inplace_merge会做什么?

C++ 如果未对范围进行排序,inplace_merge会做什么?,c++,stl,C++,Stl,报告说“必须对范围进行排序”。但是,它并没有说明如果没有对范围进行排序会发生什么。我尝试将其用于未排序的范围,结果是未排序的数组,但这可能取决于编译器。我能从这个案例的缺乏文档中得出什么结论?这是否意味着,如果范围未排序,结果是? (例如:是否允许符合标准的编译器在范围未排序的情况下创建分段错误?inplace\u merge要求对输入进行排序,这在: 要求:[第一,中间]和[中间,最后]应为根据comp和proj排序的有效范围 所以严格地说,向inplace\u merge提供未排序的输入就是

报告说“必须对范围进行排序”。但是,它并没有说明如果没有对范围进行排序会发生什么。我尝试将其用于未排序的范围,结果是未排序的数组,但这可能取决于编译器。我能从这个案例的缺乏文档中得出什么结论?这是否意味着,如果范围未排序,结果是?
(例如:是否允许符合标准的编译器在范围未排序的情况下创建分段错误?

inplace\u merge
要求对输入进行排序,这在:

要求:[第一,中间]和[中间,最后]应为根据
comp
proj
排序的有效范围

所以严格地说,向
inplace\u merge
提供未排序的输入就是故事的结束

但是标准也要求它是稳定和可靠的

这就引出了唯一可能的实现,使用a:同时遍历两个范围,通过在每一步从两个范围中选择最小的元素将它们“压缩”在一起


因此,在实践中,它很可能执行到完成,结果未排序。

inplace\u merge
要求对输入进行排序,具体如下所示:

要求:[第一,中间]和[中间,最后]应为根据
comp
proj
排序的有效范围

所以严格地说,向
inplace\u merge
提供未排序的输入就是故事的结束

但是标准也要求它是稳定和可靠的

这就引出了唯一可能的实现,使用a:同时遍历两个范围,通过在每一步从两个范围中选择最小的元素将它们“压缩”在一起


因此,在实践中,它很可能会以未排序的结果执行到完成。

这与任何具有先决条件的函数相同。如果不满足先决条件,谁能说函数将做什么?例如,如果将未排序的范围传递给二进制搜索,会发生什么?可能不会是语言级别的未定义d行为,但结果肯定没有定义。FWIW,这没有任何更多的信息。基于此,我希望使用未排序的范围调用
inplace\u merge
,这意味着未定义的行为。明显的风险是:未定义的行为是标准没有定义的(因此,未定义)。如果有关于它应该如何运行的文档,它将不再是未定义的。为什么?因为这使实现者可以自由地执行最佳算法,而不用担心违反API合同。这与任何具有先决条件的函数相同。如果不满足先决条件,谁能说函数将做什么?例如,如果将未排序的范围传递给binary_search,会发生什么?可能不会是语言级别的未定义行为,但结果肯定没有定义。FWIW没有更多的信息。基于此,我希望使用未排序的范围调用
inplace_merge
,将隐含未定义的行为传递给ri作为队长的sk显而易见:未定义的行为是标准没有定义的(因此,未定义)。如果有关于其行为的文档,它将不再是未定义的。为什么?因为这使实现者可以自由地执行最佳算法,而无需担心您违反API的约定。很有可能一些实现断言输入在调试配置中排序。这是一个很好的机会某些实现断言输入在调试配置中排序。