C++ でvectorusingアルゴリズムをソートしたい。sort
strstd::vector<int>並べ替えたいの名前です。
これの違いは何ですか:
std::sort(str.rend(),str.rbegin())
この:
std::sort(str.begin(),str.end())
C++ でvectorusingアルゴリズムをソートしたい。sort
strstd::vector<int>並べ替えたいの名前です。
これの違いは何ですか:
std::sort(str.rend(),str.rbegin())
この:
std::sort(str.begin(),str.end())
std::sort文字列の並べ替えに使用する場合(メソッドもメソッドstd::vectorもないstd::stringためsort)、最初のステートメントは正しくなく、未定義動作(UB)になります。
std::sort(str.rend(),str.rbegin());
ここでは、「過去の終わり」のイテレータであるstd::sortを逆参照しようとします。str.rend()このようなイテレータの逆参照はUBです。
逆イテレータの正しい使用法は次のとおりです。
std::sort(str.rbegin(),str.rend());
これにより、文字列/ベクトルが降順で並べ替えられます。
std::string多くのコンテナやその他のもの ( など)の標準ライブラリのイテレータには、 ( など)で始まるreverseさまざまなものがあります。これらは逆順に繰り返されます。just andを使用すると、文字列が最初から最後まで正しい形式で並べ替えられます。r rbegin()rendbeginend
逆イテレータの使用を避け、通常のbegin()andend()を文字列に使用してください。
std::string str = "bacd";
std::sort( str.begin(),str.end() );
std::cout << str << std::endl; // should produce "abcd" on your output, without quotes
編集:
vector<int>それで...代わりにソートされたいですか?std::sortその場合は、 の と を使用して呼び出すことを除いて、上記と同じことをbegin()行いend()ますstd::vector<int>。