【问题标题】:Sorting part of vector (in place)对向量的一部分进行排序(就地)
【发布时间】:2018-09-26 02:07:47
【问题描述】:

我不明白为什么下面的代码没有对向量的前两个元素进行排序:

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;
}

有什么想法吗?

【问题讨论】:

    标签: c++ sorting vector stl range


    【解决方案1】:
    Sorts the elements in the range [first, last) 
    

    来自std::sort

    如果您不熟悉符号,) 表示不包括last,您可以在this question 中找到更多信息。

    【讨论】:

    • 只是对“RTMF”这个词感到好奇,需要解释一下吗?
    【解决方案2】:

    为了对前 n 个元素进行排序,您必须指出您的调用如下:

    sort(V.begin(), V.begin() + n);
    

    因此,您必须调用 2 个元素:

     sort(V.begin(), V.begin() + 2);
    

    这是因为所有 STL 算法都采用开放范围 [first, last)。

    【讨论】:

      【解决方案3】:

      这个范围v.begin(),v.begin()+1 可以用数学方式写成[v.begin(), v.begin() + 1 ),只包含一个元素v[0],它等于2。如果你想对 2 个元素的范围进行排序,那么你应该写

      std::sort( v.begin(), std::next( v.begin(), 2 ) );
      

      相当于

      std;:sort( v.begin(), v.begin() + 2 );
      

      【讨论】:

        【解决方案4】:

        std::sort(以及所有标准库算法)需要一个 半开 范围。结束迭代器是一个过去的结束指示符(开放部分)。所以[it, it + 1) 是一个只有一个元素的范围。在您的情况下,它只是第一个向量元素。

        好吧,一个元素范围已经排序了。

        【讨论】:

          猜你喜欢
          • 2011-01-17
          • 2020-06-05
          • 2011-12-20
          • 2015-01-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-06
          相关资源
          最近更新 更多