Почему диапазон () петля быстрее, чем std :: transform ()?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему диапазон () петля быстрее, чем std :: transform ()?

Сообщение Anonymous »

Я ожидал, что следующий код даст аналогичные результаты. Но на моем оборудовании, основанная на диапазоне для () цикл занимает ~ 80 миллисекунд, в то время как std :: transform () занимает ~ 120 миллисекунд.

Код: Выделить всё

#include 
#include 
#include 

int main()
{
const auto t1 = std::chrono::high_resolution_clock::now();

/* When using loop #1, this code takes 80 milliseconds to run.
* When using loop #2, this code takes 120 milliseconds to run.
*/
for (size_t idx = 0; idx < 999999; idx ++)
{
std::string str = "Hello, World!";
#if 1
// loop #1
for (auto & c : str)
{
c = std::tolower(c);
}
#else
// loop #2
std::transform(str.begin(), str.end(), str.begin(),
[](unsigned char c)
{
return std::tolower(c);
});
#endif
}

const auto t2 = std::chrono::high_resolution_clock::now();
std::cout


Подробнее здесь: [url]https://stackoverflow.com/questions/79580967/why-is-ranged-for-loop-faster-than-stdtransform[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»