排序时在C矢量++,你可以使用STL为:为什么没有的std ::排序(矢量<T>&)
std::sort(vec.begin(), vec.end());
由于这是很常见的用法(即提供开始和结束迭代器)我不知道为什么没有那种超载这将接受的载体如参考:
template <typename T>
void sort(vector<T>& vec)
{
std::sort(vec.begin(), vec.end());
}
排序时在C矢量++,你可以使用STL为:为什么没有的std ::排序(矢量<T>&)
std::sort(vec.begin(), vec.end());
由于这是很常见的用法(即提供开始和结束迭代器)我不知道为什么没有那种超载这将接受的载体如参考:
template <typename T>
void sort(vector<T>& vec)
{
std::sort(vec.begin(), vec.end());
}
其分成算法标准库的当前设计,数据结构和迭代器有一些很不错的概念性含义:算法只经营在迭代器上,从不在容器上。这意味着算法本身无法使迭代器失效,并且所有迭代器失效通过容器修改来实现,必须明确地进行。
例如,这是为什么删除 - 删除需要两个组件:一个序列的非无效重排,然后是一个容器操作以收缩容器。此外,并非所有的范围都来自容器,所以用迭代器来表达算法在精神上更接近于在抽象“范围”上操作,而不是在包含范围的具体事物上操作。
当然还有为复杂原始的参数:通过表达在迭代器方面都算法和容器,该库需要O(中号 + Ñ)组件,其中中号是算法和数N容器的数量,而如果每个容器有一个算法,则需要O(MN)组件。是的,你可以使用模板,但完全不受约束的模板(例如template <typename T> void sort(T&)
具有非本地影响,并且约束模板是困难和微妙的(例如,对任何需要与enable_if
一起工作或面对其用户,或试图添加“概念”到C++)
可能是因为他们必须为每个容器定义一个,更可能是'T&vec'而不是'vector&vec'在任何容器上工作 –
immibis
这是部分Ranges TS有一个'Range'概念,它可以用来约束你可以排序的类型,在这种情况下,它实际上有一个'Sortable'的概念,它对普通的'Range'有一些额外的要求。 – chris
Your函数不能用于我的'vector'。Boo。 –