我无法理解为什么下面的代码不会排序vector的前两个元素:
int main() {
std::vector<int> v = {2,1,3,1,2};
std::sort(v.begin(),v.begin()+1);
for(auto elem:v)
{
std::cout<<elem<<std::endl;
}
// your code goes here
return 0;
}
有什么想法吗?
答案 0 :(得分:6)
std::sort
(以及所有标准库算法)需要半开范围。结束迭代器是一个过去的结束指示符(开放部分)。所以[it, it + 1)
只是一个元素的范围。在你的情况下,它只是第一个向量元素。
而且,一个元素范围已经排序。
答案 1 :(得分:2)
此范围[v.begin(), v.begin() + 1 )
可以像v[0]
那样以数学方式编写,只包含一个等于2
的元素std::sort( v.begin(), std::next( v.begin(), 2 ) );
。如果要对2个元素进行排序,则应编写
std;:sort( v.begin(), v.begin() + 2 );
相当于
{{1}}
答案 2 :(得分:1)
Sorts the elements in the range [first, last)
如果您不熟悉表示法,)
表示不包含last
,您可以在this question中找到有关该表示法的更多信息。
答案 3 :(得分:1)
为了对前n个元素进行排序,您必须按以下方式指示调用:
sort(V.begin(), V.begin() + n);
因此,对于2个元素,您必须调用:
sort(V.begin(), V.begin() + 2);
这是因为所有STL算法都采用开放范围[first,last)。