Я новичок в C++
Читаю пример и наткрулся на такую конструкцию std::for_each и не понял, зачем она нужна когда есть стандартный for(val v : array)?
Протестировал на время выполнения
#include <array>
#include <iostream>
#include <chrono>
#include <android/log.h>
#include <thread>
#include <fstream>
#include <utility>
using namespace std;
using namespace std::chrono;
void testDeleteIt() {
std::vector<int> workers;
for (int i = 0; i < 1000000; ++i) {
workers.push_back(i);
}
int count = 0;
high_resolution_clock::time_point t1 = high_resolution_clock::now();
for (int &i : workers) {
count += i;
}
__android_log_print(ANDROID_LOG_ERROR, "HERE", "HERE ::: %s", std::to_string(count).c_str());
count = 0;
long long int duration = duration_cast<microseconds>(high_resolution_clock::now() - t1).count();
__android_log_print(ANDROID_LOG_ERROR, "TIME1", "TIME 1::: %s", std::to_string(duration).c_str());
high_resolution_clock::time_point t2 = high_resolution_clock::now();
std::for_each(workers.begin(), workers.end(), [&count](int &i) -> void {
count += i;
});
count = 0;
__android_log_print(ANDROID_LOG_ERROR, "HERE", "HERE ::: %s", std::to_string(count).c_str());
duration = duration_cast<microseconds>(high_resolution_clock::now() - t2).count();
__android_log_print(ANDROID_LOG_ERROR, "TIME2", "TIME 2 ::: %s", std::to_string(duration).c_str());
}
И получилось, что стандартный цикл выполныется почти в 2 раза быстрее
TIME 1::: 10102
TIME 2 ::: 18459
И плюс в std::for_each еще и заморочки с лямбдой
Так в чем тогда его преимущество?
#include <android/log.h>не является стандартным файлом, используемая платформа и настройки компилятора у вас в вопросе не указаны. Еще я сильно подозреваю, что замеры времени производились при запуске отладочной версии. – user7860670 Jun 17 '19 at 08:37