为什么没有std::sort(vector<T>&)
Why there is no std::sort(vector<T>&)
在C 中排序向量时,您可以使用stl as:
std::sort(vec.begin(), vec.end());
因为这是非常常见的用法(即提供开始和结束迭代器),我想知道为什么没有排序的过载可以接受对向量的引用,例如:
template <typename T>
void sort(vector<T>& vec)
{
std::sort(vec.begin(), vec.end());
}
标准库的当前设计,该设计将算法,数据结构和迭代器分为算法具有一些非常好的概念含义:算法仅在迭代器上运行,从不在容器上。这意味着算法本身不能使迭代器无效,并且所有迭代器无效都是通过容器修改的,必须明确进行。
这是例如,删除 - 启动过程需要两个组成部分:序列的无侵袭重排,然后进行容器操作以缩小容器。
此外,并非所有范围都来自容器,因此,用迭代器来表达算法的精神更接近于抽象"范围",而不是在包含范围的具体物品上。
当然,复杂性的原始论点是:通过迭代器来表达算法和容器,库需要o( m n )组件,其中 m 是算法的数量和 n 容器的数量,而如果每个容器有一个算法,则需要O( mn )组件。是的,您可以使用模板,但是完全不受约束的模板(例如template <typename T> void sort(T&)
具有非本地含义,约束模板很难且微妙(例如,在任何需要与enable_if
合作或面对他们的用户或试图面对用户的人身上计算头发将"概念"添加到C )。
相关文章:
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- EASTL矢量<向量<int>>连续的
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败
- C :对矢量进行排序&lt; struct&gt;(结构有2个整数)基于结构的整数之一
- 明确的专业化“ CheckIntmap&lt;&gt;”实例化
- 什么是模板&lt;&gt;inline bla bla
- 编辑C Qlist&lt; object*&gt; gt;QML代码和一些QML警告中的模型
- eigen :: llt&lt;eigen :: matrixxd&gt;具有不完整的类型
- 错误,包括&lt; ctype&gt;在原子上使用C 11
- std::vector<;uint8_t>;当C++11/14启用时,手动复制而不是调用memcpy
- 如何加入向量&lt; int&gt;到C 中的单个INT
- 是std :: set&lt; std :: future&gt;不可能存在
- 是numeric_limits&lt; int&gt; :: is_modulo从逻辑上矛盾
- opencv 2.4.7在iOS错误背景_segm.hpp #include&lt; list&gt;未找到
- 在修改列表后,std :: list&lt; t&gt; :: end()的值是否会更改
- ///<评论></评论>在Visual Studio中