정적 변수/비 큐 및 객체에 문제가 있습니다. 실시간 데이터 스트림에 대한 통계 (평균, 중간 값, 비뚤어 짐 등)를 계산하고 있습니다.이 데이터를 스트리밍하는 동안 정적 vars를 사용하거나이 버전의 정적 컨테이너 (deque)를 사용합니다. 여러 버전을 만들었지 만 모두 같은 문제가 있습니다. 동일한 메소드의 두 인스턴스를 만들지 만 정적 대기열은 공유되는 것처럼 보입니다. 내가 범위 오류 나가정적 변수/비 큐 및 객체
Stats s1, s2;
s1.Mean(streamData, 20);
s2.Mean(streamData, 30);
:
double Mean(double& lastValue, const int& length)
{
static std::deque<double> buffer(length);
double sum = 0.0;
buffer.pop_back();
buffer.push_front(lastValue);
for (int j = 0; j < length; j++) {
try {
sum += buffer.at(j);
}
catch (const std::out_of_range& oor) {
std::cerr << "Out of Range error: " << j << " - " << oor.what() << '\n';
}
}
return length != 0 ? sum/length : 0;
}
내가 이런 두 인스턴스를 한 경우 : 내가 (가장 효율적인 만 읽을 수 없습니다) 다음과 같은 코드가 있습니다.
질문 :
out_of_range 예외의 원인이 무엇- ?
- 내가 틀렸을 수도 있지만 정적 인 deque가 두 객체간에 공유되는 것처럼 보입니다. 어떻게 가능합니까?
도움을 주시면 감사하겠습니다.
당신이하는 방법의 두 가지 또는 하나의 인스턴스를 어떻게해야합니까? – harper
함수 - 정적 개체 또는 변수는 함수 당 하나의 인스턴스를 가지며 Stats 개체 당 하나의 인스턴스가 아닙니다. 큐를 모든 Stats 객체가 공유하도록하려면 대기열을 클래스의 정적 객체로 만듭니다. –
@Erik OK, 개체 당 하나의 인스턴스가 아니라 함수 당 하나의 인스턴스입니다. 이제 왜 out_of_range 예외가 발생하는지 이해합니다. deque를 각 함수에 전달하는 경우를 제외하고는 어떻게 해결할 수 있을지 제안하십시오. – Joerg