Idiom: Passing reverse iterator to a constructor

文字列\(s\)から反転した文字列\(t\)を作成するとき、これまではコピーして反転という処理をしていました。

  std::string s("string");

            :

  std::string t(s);

  std::reverse(ALL(t)); // tの内容は"gnirts"となる

今日なんとなくこの実装を見て目から鱗が落ちました。コンストラクタにリバースイテレータを渡してしまえばいいんですね。この発想はなかった。

  std::string s("string");

  std::string t(s.rbegin(), s.rend());  // tの内容は元々"gnirts"となる!

「何かを反転したもの」を得たいことはよくあるのでこの手法はこれから活躍しそうです。