Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- main.cpp
- #include <iostream>
- #include <vector>
- #include <cassert>
- using namespace std;
- struct days {
- int count;
- float sum;
- };
- std::vector<float> ComputeAvgTemp(const std::vector<std::vector<float>>& measures) {
- if (measures.empty() || measures[0].empty()) {
- return {};
- }
- // Инициализация вектора структур days для хранения суммы и количества измерений для каждой минуты
- std::vector<days> aggregated(measures.size()); // Используем размер первого внутреннего вектора
- for (const auto& day : measures) {
- for (size_t i = 0; i < day.size(); ++i) { // Используем размер текущего внутреннего вектора
- if (day[i] > 0) {
- aggregated[i].sum += day[i];
- aggregated[i].count++;
- }
- }
- }
- // Инициализация вектора для хранения средних значений
- std::vector<float> averages(measures[0].size());
- // Вычисление средних значений для каждой минуты
- for (size_t i = 0; i < measures[0].size(); ++i) { // Используем размер первого внутреннего вектора
- averages[i] = (aggregated[i].count > 0) ? aggregated[i].sum / aggregated[i].count : 0;
- }
- return averages;
- }
- void Test() {
- // 4 дня по 3 измерения
- vector<vector<float>> v = {
- {0, -1, -1},
- {1, -2, -2},
- {2, 3, -3},
- {3, 4, -4}
- };
- // среднее для 0-го измерения (1+2+3) / 3 = 2 (не учитывам 0)
- // среднее для 1-го измерения (3+4) / 2 = 3.5 (не учитывам -1, -2)
- // среднее для 2-го не определено (все температуры отрицательны), поэтому должен быть 0
- assert(ComputeAvgTemp(v) == vector<float>({ 2, 3.5f, 0 }));
- }
- int main() {
- Test();
- cout << "Test passed successfully!" << endl;
- return 0;
- }
- ***************************************************************************************************************************************
- log_duration.h
- #pragma once
- #include <chrono>
- #include <iostream>
- #define PROFILE_CONCAT_INTERNAL(X, Y) X##Y
- #define PROFILE_CONCAT(X, Y) PROFILE_CONCAT_INTERNAL(X, Y)
- #define UNIQUE_VAR_NAME_PROFILE PROFILE_CONCAT(profileGuard, __LINE__)
- #define LOG_DURATION(x) LogDuration UNIQUE_VAR_NAME_PROFILE(x)
- class LogDuration {
- public:
- // заменим имя типа std::chrono::steady_clock
- // с помощью using для удобства
- using Clock = std::chrono::steady_clock;
- LogDuration(const std::string& id) : id_(id) {
- }
- ~LogDuration() {
- using namespace std::chrono;
- using namespace std::literals;
- const auto end_time = Clock::now();
- const auto dur = end_time - start_time_;
- std::cerr << id_ << ": "s << duration_cast<milliseconds>(dur).count() << " ms"s << std::endl;
- }
- private:
- const std::string id_;
- const Clock::time_point start_time_ = Clock::now();
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement