Нет подходящего конструктора, доступного для преобразования double в std :: chrono :: duration
Смею предположить, что работа с std :: list далека от основной проблемы здесь.
Имея дело с std::chrono
, нужно знать основные концепции этого. Что не объяснено здесь, пожалуйста, посмотрите на cppreference.com
Шаг первый. Вы сами решаете, какие часы вам нужно / хотите использовать.
using Clock = typename std::chrono::high_resolution_clock ;
Шаг второй. Вы используете вложенный тип длительности, объявленный в нем. В вашем случае вы хотели бы иметь последовательность длительностей.
using time_durations_sequence_type = std::vector<Clock::duration> ;
наименование типа очень важно. Я сознательно использую общий термин «последовательность». Вы можете выдвинуть идею std :: list для ее реализации, но я не понимаю, почему. Таким образом, я использую std::vector
выше.
Также обратите внимание, я не использую double
или long int
в качестве типа «длительности». Во-первых, std::duration
- это «время, необходимое для того, чтобы произошло событие». Во-вторых, это не скаляр, это тип класса. Традиционно, с C лет, концепция времени основывалась только на тиках.
Итак, для краткости длинного рассказа мы используем концепцию std :: duration, конкретизируемую как вложенный тип в «часах», которые мы выбрали для использования здесь.
// not a point in time
Clock::duration
//
// there is no guarantee above
// is the same type as
// std::chrono::duration<double>
// and we do not need one
И выше - все, что нам нужно для реализации необходимой вам функциональности.
// two points in time
auto start_time = Clock::now();
auto finish_time = Clock::now();
// the duration
Clock::duration time_duration = finish_time - start_time ;
Теперь мы сохраняем продолжительность в нашем типе последовательности.
time_durations_sequence_type tdst{ time_duration } ;
И в других местах мы используем последовательность сохраненных длительностей, которые мы накопили.
// time_durations_sequence_type tdst
for (auto duration : tdst ) {
std::cout << std::endl
<< duration.count() << " nano seconds"
<< std::endl;
}
Обратите внимание, как выше мы использовали метод count()
для перехода к фактическим тикам, которые по умолчанию в std :: chrono представляют наносекунды.
Рабочий код здесь .