---
# System prepended metadata

title: '#include <iostream>#include <'

---

![univ-report-Q](https://hackmd.io/_uploads/S1hi_x1Va.jpg)



(가) 클래스 설계에 대한 설명
	클래스의 멤버함수 및 용도를 표로 작성 (강의자료 5강 10번 슬라이드)
	클래스의 데이터멤버 및 용도를 표로 작성
	각각의 클래스 멤버함수에 대해 다음 내용 작성
-	매개변수의 자료형 및 용도
-	반환 값이 있다면 값의 의미 및 자료형
-	처리 내용의 설명(형식 제한 없음)



```cpp!=
#include <iostream>
#include <vector>

class WeightedMovingAverageCalculator {
public:
    WeightedMovingAverageCalculator(const std::vector<double>& weights) : weights_(weights), sum_(0.0), weightSum_(0.0) {
        if (weights_.empty()) {
            std::cerr << "Error: Weights cannot be empty." << std::endl;
        }
    }

    void addData(double data) {
        if (weights_.empty()) {
            std::cerr << "Error: Weights cannot be empty." << std::endl;
            return;
        }

        if (dataQueue_.size() == weights_.size()) {
            sum_ -= dataQueue_.front() * weights_.front();
            dataQueue_.pop_front();
        }

        dataQueue_.push_back(data);
        sum_ += data * weights_.back();
        weightSum_ += weights_.back();
    }

    double getWeightedMovingAverage() const {
        if (weightSum_ == 0.0) {
            std::cerr << "Error: The sum of weights cannot be zero." << std::endl;
            return 0.0;
        }

        return sum_ / weightSum_;
    }

private:
    std::vector<double> weights_;
    std::deque<double> dataQueue_;
    double sum_;
    double weightSum_;
};

int main() {
    std::vector<double> weights = {0.5, 0.3, 0.15, 0.05};
    WeightedMovingAverageCalculator wmaCalculator(weights);

    // 예제 데이터 추가
    wmaCalculator.addData(10.0);
    wmaCalculator.addData(15.0);
    wmaCalculator.addData(20.0);

    // 가중 이동 평균 출력
    std::cout << "Weighted Moving Average: " << wmaCalculator.getWeightedMovingAverage() << std::endl;

    return 0;
}
```

![univ-report-1](https://hackmd.io/_uploads/Hkj3Imk4p.jpg)
