C++を使用して単語(std::string)を大文字にする最速の方法は何ですか?
-O3 フラグを指定して g++ 4.6.3 を使用する Debian Linux では、この関数を使用boost::to_lower
すると、AMD Phenom(tm) II X6 1090T プロセッサ (3200 MHz) で実行の単一スレッドで約 24 秒で 81,450,625 ワードが大文字化されます。
void Capitalize( std::string& word )
{
boost::to_lower( word );
word[0] = toupper( word[0] );
}
この関数を使用std::transform
すると、約 10 秒で同じことが行われます。テストの合間に VM をクリアするので、この違いはまぐれではないと思います。
sync && echo 3 > /proc/sys/vm/drop_caches
void Capitalize( std::string& word )
{
std::transform(word.begin(), word.end(), word.begin(), ::tolower);
word[0] = toupper( word[0] );
}
もっと速い方法はありますか?速度のために移植性を失いたくはありませんが、標準 C++ またはブースト付き標準 C++ で動作するより高速な方法がある場合は、それらを試してみたいと思います。
ありがとう。