そうだ、reverse関数を実装しよう
某社に面接に行ってきました。
で、そこで「reverse関数書いて(意訳)」と言われたので書いてきた
void reverse(std::string& str) { size_t N = str.size(); for (size_t i = 0; i < N/2; ++i) std::swap(str[i], str[N - 1 - i]); }
こんなの。CodeIQなら★1レベルか
せっかくだから他の実装方も考えていこうか
1:Iteratorでまわしてpush_frontしていく方法
効率が悪い。ついでに言うとpush_frontがstringにない。operator+を使えばできそうだがそこまでしたくない
2:reverse Iteratorでpush_backしていく方法
もうこれでいいじゃん
std::string reverse(const std::string& str) { return std::string(str.rbegin(),str.rend()); }
正しい。正しいがなんか身も蓋ももない方法
3:foldlでどーたらこ―たら
4:foldrでどーたらこ―たら
foldr([](std::string s,char c){return c+s; },str,std::string()); foldr([](char c, std::string s){return s+c; },str,std::string());
こんな感じか、foldは各自で実装してくれ
5:binary_foldで
binary_fold([](std::string l, std::string r){return r + l; }, str, [](char c){return std::string{ c }; });
これくらいか。他の実装思いついたら誰か教えてくれ