为什么在C++中没有排序(v)?

NoS*_*tAl 11 c++ stl

我总是想知道为什么没有

sort(v);// same as std::sort(v.begin(),v.end())
Run Code Online (Sandbox Code Playgroud)

如果我很久以前回想起来的话,我看到了一个boostcon剪辑,其中说话者说这需要概念,但我不明白为什么.顺便说一句,我试过这个(在VS 11中)并且它从我能看到的内容中起作用.

template <typename Container>
void sortfx(Container& c)
{
    std::sort(c.begin(),c.end());
}
int main()
{

    std::vector<double> v;
    //std::list<double> v; this causes compile errors
    v.push_back(1701);
    v.push_back(1729);
    v.push_back(74656);
    v.push_back(2063);
    sortfx(v);
    assert(std::is_sorted(begin(v),end(v)));

}
Run Code Online (Sandbox Code Playgroud)

编辑:Bjarne自己解释了概念,以排序为例:) https://www.informit.com/articles/article.aspx?p=2080042&WT.rss_f=Article&WT.rss_a=An%20Interview%20with%20Bjarne%20Stroustrup&WT .rss_ev =一

Bo *_*son 10

这不是需要概念的std::sort(v)- > std::sort(v.begin(), v.end())扩展,而是替代排序函数需要额外的参数来进行比较 - std::sort(v.begin(), v.end(), compare).

如果您有一个调用std::sort(v, compare),实现需要概念来区分它与std::sort(start, end)非容器.

<algorithm>头是满是带着这样的问题模板.


Dar*_*tle 5

学习标准C++作为新语言(PDF) Stroustrup,C/C++用户期刊.第43-54页.1999年5月:

在这种情况下,普通排序(v)会更简单,但有时我们想要对容器的一部分进行排序,因此更通用地指定我们想要排序的开始和结束.

这对我来说很有意义.正如你所展示的那样,创建一个包装器是微不足道的,没有包装器使用它并不是非常麻烦.拥有sort()容器的第二个似乎并不值得.