Каков самый быстрый способ использовать заглавные буквы в словах (std::string) с помощью C++?
В Debian Linux, использующем g++ 4.6.3 с флагом -O3, эта функция, использующая boost::to_lower
, будет использовать 81 450 625 слов примерно за 24 секунды в одном потоке выполнения на AMD Phenom(tm ) Процессор II X6 1090T (3200 МГц).
void Capitalize( std::string& word )
{
boost::to_lower( word );
word[0] = toupper( word[0] );
}
Эта функция, использующая std::transform
, делает то же самое примерно за 10 секунд. Я очищаю виртуальную машину между тестами, поэтому не думаю, что эта разница случайна:
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++ с ускорением, я бы хотел их попробовать.
Спасибо.