Самый быстрый способ капитализации слов

Каков самый быстрый способ использовать заглавные буквы в словах (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++ с ускорением, я бы хотел их попробовать.

Спасибо.

6
задан 21 May 2012 в 21:37
поделиться