목록을 언제 사용해야하는지 이해할 수는 있지만 비디오 게임에서 목록을 사용하는 것보다 벡터를 사용하는 것이 더 좋은시기를 이해하지 못합니다.
(포인터를 제거 / 추가하기 때문에 목록에 삽입 / 삭제하는 것이 더 빠른 이유를 이해하지만 여전히 해당 항목을 찾아야합니다 ...)
container
.
목록을 언제 사용해야하는지 이해할 수는 있지만 비디오 게임에서 목록을 사용하는 것보다 벡터를 사용하는 것이 더 좋은시기를 이해하지 못합니다.
(포인터를 제거 / 추가하기 때문에 목록에 삽입 / 삭제하는 것이 더 빠른 이유를 이해하지만 여전히 해당 항목을 찾아야합니다 ...)
container
.
답변:
내 엄지 손가락의 규칙, 그리고 나는 확실히 이것에 대한 논의가있을 것이야,하는 것입니다 결코 목록을 사용하지 않습니다 (당신은 매우, 매우 자주 큰 목록의 중간에서 사물을 제거 할 필요가없는 경우).
컨테이너의 모든 요소를 연속 메모리 (따라서 캐시 친화적)로 유지함으로써 얻을 수있는 속도는 벡터를 추가 / 제거 / 크기 조정하는 추가 비용을 상쇄 할 가치가 있습니다.
편집 : 조금 더 명확히하기 위해, 물론 어떤 종류의 "더 빠른"질문은 특정 요구 사항과 관련된 모든 데이터 세트가있는 플랫폼에서 테스트되어야한다는 것은 말할 필요도 없습니다. 요소 컬렉션이 필요한 경우에는 합당한 이유가 없는 한 벡터 (또는 거의 동일한 것 인 deque) 를 사용하십시오.
당신의 선택은 당신의 필요를 반영해야합니다. 벡터의 모든 요소는 메모리에 연속적이며 목록에는 다음 / 이전 요소에 대한 포인터가 있으므로 각각의 장점 / disavantages가 있습니다.
리스트 :
벡터 :
따라서 프로그램에서 요소를 자주 추가하고 제거해야하지만 이전에 다른 요소가 없어도 특정 요소에 액세스하거나 거의 액세스하지 않는 경우 목록이 더 좋습니다. 벡터는 더 나은 액세스 시간을 위해 사용해야하지만 요소를 제거하거나 추가해야 할 때 효율성이 떨어집니다.
stackoverflow 에서이 게시물을 확인하면 답변에 따라 특정 컨테이너로 안내하는 요구 사항에 대한 기본적인 질문이있는 멋진 그래프가 표시됩니다.
일반적으로리스트는 추가 및 제거 조작이 많은 큐와 같은 구조에 사용됩니다. 예 : 끊임없이 변경되어야하는 엔티티 목록. 목록 자체에는 화면의 엔터티 만 포함되므로 자주 변경됩니다.
벡터 (또는 배열)는 그다지 변경되지 않고 컬렉션 내의 개별 항목에 빠르게 액세스해야하는 컬렉션에 더 적합합니다. 예 : 주어진 인덱스에서 타일을 찾아야하는 타일 맵.
Tetrads의 의견은 사실 일 수 있지만 사용되는 프로그래밍 언어에 따라 다릅니다. 귀하가 귀하의 질문에 태그를 추가 한 c++
것을 보았지만 언어별로 다른 답변을 주려고했습니다.
콘솔 게임에서는 다음과 같은 이유로 std :: list를 사용하지 않습니다.
std :: vector조차도 콘솔에서 호의를 잃고 있습니다.
struct point{float x, y, z, w}; std::vector<point> positions;