2012-10-22 2 views
0

제가 알고 있듯이 deque는 순환 버퍼이며, 공간이 부족할 경우 새로운 공간을 할당합니다 (가능한 경우). deque가 커질 수있는 것을 제한 할 수있는 방법이 있습니까? 최대 크기 이상으로 커지지 않게하는 유일한 방법은 데이터를 양면 큐에 삽입 할 때마다 확인하는 것입니다.deque max_size를 최대 크기로 설정하십시오.

답변

2

예, 모든 STL 모음에서와 마찬가지로 템플릿 매개 변수 중 하나는 할당 자입니다.

따라서 메모리를 추적 할 수있는 사용자 지정 할당기를 작성할 수 있으며이 제한을 초과하면 메모리를 사용할 수 있다고하더라도 을 버립니다.

부수적으로, std::deque은 일반적으로 각 페이지에 고정 된 수의 요소가 들어있는 "페이지"모음으로 구현됩니다.

"어디서든지"삽입하거나 삭제할 수있는 순환 버퍼 구현을 원할 경우 을 사용하면 가장 효율적이지 않으므로 std::list이됩니다 (부스트에서 사용할 수있는 순환 컬렉션이 있지만 사용할 수 있음).

+0

cutsom 할당이 문제에 대한 잘못된 접근 것으로 보인다 포장이 개 멤버 함수를 작성합니다. deque에 대해 요청 된 메모리 양과 deque 크기 사이에는 엄격한 관계가 없습니다. 물론 벡터의 크기와 용량 사이에는 그러한 관계가 없습니다. – john

+0

deque 구현 그 자체와 할당 자 사이의 관계와 어느 쪽이 페이지 크기를 선택했는지를 여러분은 아마 언급하고있을 것입니다. 따라서, 당신이 원하는 최대 메모리 할당을 기준으로했을 때 완벽하게 튜닝 할 수는 없습니다. 이 객체를 허용하면 할당 자 (allocator)가이를 관리 할 수 ​​있습니다. 실제로는 임계 값에 정확히 도달 할 수 없다는 것을 알 수 있습니다. – CashCow

1

deque은 순환 버퍼가 아니며; 일반적으로 배열의 링크 된 컬렉션으로 구현됩니다. 순환 버퍼의 경우 부스트에서 circular_buffer을 확인하십시오.

0

대기열은 원형 버퍼가 아닙니다. 순환 버퍼로 구현 될 수 있지만 구현 세부 사항은 사용자에게 표시되지 않습니다. 크기 검사를하기 위해 래퍼 클래스 또는 편의 함수를 작성하는 것이 좋습니다.

1

내 경험으로 간단한 방법은 래퍼 클래스에 의해 양단 큐를 캡슐화 push_backpush_front

관련 문제