고정 된 크기의 기존 데이터 구조가 있습니까? 새로운 요소가 삽입되면 가장 오래된 / 마지막 요소가 나오게됩니까?


20

새 요소가 삽입되면 가장 오래된 요소와 마지막 요소를 밀어 낼 데이터 구조를 찾고 있습니다. 예를 들어 D구조를 나타냅니다. D유형의 3 개 요소가 포함되어 Number D의 기본 값으로 초기화됩니다 1, 23.

=[1,2,]

경우 Number값을 포함하는이 5삽입되어 D, 3압출되고, 반면 12오른쪽으로 시프트된다.

=[5,1,2]

가장 먼저 떠오르는 것은 배열이지만 정의에는 푸시 동작이 포함되지 않습니다.


글쎄 내장 데이터 구조가 없지만 이중 연결 목록 연결 목록을 사용하여 구현하는 것이 간단 합니까?
사용자를 찾을 수 없음

1
큐에서 상속 된 랩퍼를 사용하는 것은 어떻습니까? 그런 다음 메소드를 추가하십시오 void push_replace(T val) { pop(); push(val); }.
Francesco Dondi

@FrancescoDondi 아마이어야한다T push_replace(T val) { T old = pop(); push(val); return old; }
valbaca

1
이제 분명히 있습니다 : 당신은 단지 비공식적으로 정의했습니다; 아마도 잘 알려진 것인지, 일반적으로 합의 된 인터페이스를 가지고 있는지, 구현이 가능한지 여부를 물어봐야합니다.
PJTraill

@valbaca pop()복잡한 객체를 복사하는 예외가있는 경우 스택 해제와 관련된 문제로 인해 아무것도 반환하지 않는 C ++을 생각하고 있으므로 front()폐기하기 전에 필요한 경우 이전에 사용해야합니다. 그러나 예외에 신경 쓰지 않으면 더 나은 방법이 될 수 있습니다.
프란체스코 돈디

답변:


44

고정 크기 대기열은 종종 일부 사람들이 순환 버퍼 라고 부르는 것을 사용하여 구현됩니다 . 가득 차지 않도록 보호 기능을 제거하면 원하는 동작을 얻을 수 있습니다.

물론 어레이에서 실제 푸시는 발생 하지 않으며 너무 비싸지 만 외부에서 보이는 것처럼 보일 것입니다.


의견은 긴 토론을위한 것이 아닙니다. 이 대화는 채팅 으로 이동 되었습니다 .
라파엘
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.