まだ読破していませんが、途中で気になったところがあったのでメモを残します。
本記事のプログラムは、著者のHP(http://www.guntheroth.com/)で公開されているものを使用しています。
「4章 文字列使用を最適化する:事例研究」では、
文字列から制御文字を取り除くプログラムを題材に最適化の例を示しています。
ベースとなる(あまり効率の良くない)プログラムは以下の通りです。
std::string remove_ctrl(std::string s) {
std::string result;
for (size_t i=0; i= 0x20)
result = result + s[i];
}
return result;
}
std::string remove_ctrl_erase(std::string s) {
for (size_t i = 0; i ヘッダのstd::remove_if()が思いつきます。
remove_ctrl_erase()はerase()で1文字ずつ削除している点がやや非効率です。
というわけで以下の関数を作りました。
[code=cpp]
std::string remove_ctrl_remove_if(std::string s) {
s.erase(std::remove_if(s.begin(), s.end(), [](auto ch) { return ch < 0x20; }), s.end());
return s;
}
【まとめ】
・書籍に書いてあることが最良であるとは限らない
・実測することは重要