저는 TStack으로 작업하여 내 프로그램에서 간단한 실행 취소/다시 실행 기능을 구현했습니다. 이것의 뒤에있는 생각은 액션이 수행 될 때 프로그램의 현재 상태가 저장된다는 것입니다. 즉, 스택으로 푸시됩니다. 사용자가 실행 취소를 클릭하면 프로그램의 마지막 상태가 다시로드됩니다. 즉 스택에서 팝됩니다.Delphi - TStack 용량 혼동
이 아이디어의 결함은 스택이 계속 증가 할 수 없다는 것입니다. 용량 값에 도달하면 가장 오래된 항목 (스택 맨 아래에있는 항목)이 새 항목이 맨 위에 푸시 될 때 제거되어야한다는 것을 의미합니다.
Delphi의 TStack 객체에는이 '정리'를 자동으로 수행한다고 가정하는 Capacity 속성이 있지만 스택에 과부하 (예 : 11 개 항목을 capcity 10으로 푸시)하면 용량이 더 많은 항목을 수용하도록 업데이트됩니다. .
누군가이 인스턴스에서 TStack을보다 효과적으로 사용하는 방법에 대한 조언을 해 줄 수 있습니까? 대안으로 배열 구조를 사용하는 것이지만 스택을 사용하는 것이 쉽다는 것을 알고 있습니다. 현실에서는 TStack
안부
대기열에 마지막으로 추가 된 항목이있는 표시기와 대기열을 사용하는 것이 더 쉽습니다. 그렇게하면 다시 할 수있는 옵션이 생깁니다. –
스택이 작동하지 않습니다. 포기하다. 잘못된 데이터 구조입니다. 당신은 아마도 deque를 찾고 있습니다. 또는 고정 길이 배열을 사용하여 직접 만들 수도 있습니다. 배열이 가득 차게되면 순환 색인을 사용하십시오. –
유감스럽게도, 'Capacity'속성은 알게 되듯이 자동으로 증가합니다. 그의 모든 TOrderedList 파생 컬렉션 객체들과 동일하다. 또한 성장하지 않도록 강제하는 설정도 없습니다. 'OnNotify' 이벤트를 사용하여 자신의 한도에 도달했는지 확인하고, 그렇다면 필요에 따라 내용을 변경할 수 있습니다. –