I am wondering is this way of reversing a string is safe?
void ReverseString( std::string & stringToReverse )
{
stringToReverse.assign( stringToReverse.rbegin(), stringToReverse.rend() );
}
§21.4.6.3/20 によると、assign(first,last)
(イテレータfirst
とlast
) は次と同等です。
assign(string(first,last))
したがって、最初に新しい文字列オブジェクトを作成してから割り当てます。コピー元の文字列が (逆に) コピーされている間に変更されているというリスクはありません (それを恐れていた場合)。
ただし、std::reverse(begin(str),end(str))
他の人が提案したように使用する方が優れており、潜在的に効率的です。
これがあなたのコードをレビューするためのリクエストなのか、それとも他のオプションについて知らないのかはわかりませんが、std::reverse
から使用する必要があります<algorithm>
std::string str = "Hello world!";
std::reverse(str.begin(), str.end());
これにより、文字列が逆になります。新しい文字列を作成したい場合は、基本的assign()
に、std::string
コンストラクターを使用してコードにあることを行っています。
std::string reversed(str.rbegin(), str.rend());
他の人が示唆しているように、実際、あなたがしたことはchar
順序を逆にします。これが実際に文字列を逆にするという事実は、「 reverse」と「string」と「char 」の概念が何を意味するかによって異なります。
Anstd::string
は 8 ビットの長さのシーケンスですchar
(少なくともほとんどのプラットフォームでは)。日本語の文字列 (ただし、フランス語、イタリア語、またはドイツ語の文字列でさえ) は、0..127 の範囲外のコードポイントを含む可能性があるため、8 ビット文字に表現するには多少エンコードする必要があります。 1 よりもchar
。-schar
を逆の順序で配置しても、テキストが逆になるわけではなく、完全に混乱するだけです。
1 character <=> 1 char
純粋な ASCII テキストに対してのみ true であると仮定します。