为何这段C++代码无法对vector的前两个元素进行原地排序?
问题分析与解决
嘿,我一眼就发现问题所在啦!C++标准库的std::sort函数遵循左闭右开区间的规则——也就是说它会处理[first, last)范围内的元素:包含first指向的元素,但不包含last指向的元素。
你写的std::sort(v.begin(),v.begin()+1),其实只指定了从第一个元素到第二个元素的前一个位置,这个区间里只有v[0]这一个元素,单个元素根本不需要排序,自然就看不到任何变化啦。
修正后的代码
要对前两个元素排序,你需要把区间的结束位置设为v.begin()+2,这样就能覆盖v[0]和v[1]两个元素:
int main() { std::vector<int> v = {2,1,3,1,2}; std::sort(v.begin(),v.begin()+2); // 这里改成+2 for(auto elem:v) { std::cout<<elem<<std::endl; } return 0; }
运行这段代码后,输出会变成:
1
2
3
1
2
这样前两个元素就被正确排序啦。
内容的提问来源于stack exchange,提问作者PapaDiHatti
相关产品推荐
相关产品推荐

