데이터를 일시적으로 처리하고 저장해야합니다. 현재 최대 요소에 도달하면 std::vector::push_back
을 사용하여 데이터를 추가하고 std::vector::erase
을 사용하여 요소를 삭제합니다. 내 문제는 내가 많은 양의 데이터를 처리해야하고 최대량에 도달하면 지우기가 성능에 영향을 미친다는 것이다. 그래서 나는 최적화로 매 yms마다 데이터를 추가하고 x 요소를 지우기로 결정했습니다. 시작하려면 벡터에 일정량을 예약해야합니다. 나는 다른 곳으로 데이터를 전달하기 위해 const double *std::vector<T>::data()
함수가 필요하고 어떤 변환/복사 또는 아무것도 할 수 없기 때문에 벡터를 사용합니다. 그것은 단지 빠르다.표준 벡터 성능/대안
std::vector<double> data;
size_t max; // there are millions of elements, e.g. 2000000
data.reserve(max);
// happens every x microseconds
void receive(double val) {
data.push_back(val);
}
// timed every x ms
void update() {
if (data.size() > max)
data.erase(data.begin(),data.end()+(data.size()-max));
}
내 질문은 : 어떻게하면 더 효율적으로 만들 수 있습니까? 다른 컨테이너를 사용하여? 컨테이너를 const double *
으로 변환 할 수 있습니까?
필자는이 설정으로 항상 최대 값을 초과했음을 알았습니다. 성능 저하의 원인이 될 수 있습니까? 다음 코드로 문제가 해결 되었습니까?
if (data.size() > max*0.8)
data.erase(data.begin(),data.begin()+(data.size()-max*0.8));
미리 감사드립니다.
[std :: deque를 보라] – user4581301
const T * data() 함수가 없거나 ? – fonZ
원형 버퍼도 솔루션 일 수 있습니다. – user4581301