0

C++ でvectorusingアルゴリズムをソートしたい。sort

strstd::vector<int>並べ替えたいの名前です。

これの違いは何ですか:

std::sort(str.rend(),str.rbegin())

この:

std::sort(str.begin(),str.end())
4

2 に答える 2

5

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());

これにより、文字列/ベクトルが降順で並べ替えられます。

于 2013-02-10T10:16:52.147 に答える
3

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>

于 2013-02-10T10:10:52.303 に答える