C++ でvector
usingアルゴリズムをソートしたい。sort
str
std::vector<int>
並べ替えたいの名前です。
これの違いは何ですか:
std::sort(str.rend(),str.rbegin())
この:
std::sort(str.begin(),str.end())
C++ でvector
usingアルゴリズムをソートしたい。sort
str
std::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()
rend
begin
end
逆イテレータの使用を避け、通常の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>
。