2

指定された並べ替えられていないベクトルから、n 番目に小さい要素を取得したいと考えています。標準ライブラリにメソッドがあることがわかりました。しかし、次の結果がわかりません。

エントリ {3,4,5,2,3} を持つベクトルを取得し、2 番目に小さい要素が必要です。次のコードを実行すると、2 番目の位置に数字 2 が表示されます。実際には 3 になるはずです。2 は 2 番目ではなく 1 番目に小さい要素だからです。

私の間違いは何ですか?

#include <iostream>
#include <vector>
#include <algorithm>

int main()
{
  std::vector<size_t> temp;
  temp.assign({3,4,5,2,3});
  std::nth_element (temp.begin(), temp.begin()+2, temp.end());
  std::cout << std::endl;
  for(size_t i=0;i<temp.size();i++){ printf("%.2f\n",(double)temp[i]);  }
}
4

2 に答える 2

5

temp.begin()+2ベクトルの 2 番目の要素ではなく、3 番目の要素を返します。最初の要素はtemp.begin()(ie temp.begin() + 0) で、2 番目の要素はtemp.begin() + 1です。だからあなたはこれをしたい:

std::nth_element (temp.begin(), temp.begin()+1, temp.end());
于 2015-06-07T17:57:45.063 に答える