2012-11-05 1 views
5

안녕하세요, 벡터처럼 인덱싱 할 수있는 stl 컨테이너가 필요하지만 벡터에서 크기를 조정하거나 예약 할 때처럼 메모리의 이전 요소를 이동하지 않습니다 (모든 요소를 ​​충분히 수용 할 수있을만큼 처음에는 예비를 호출하지 않는 한, 그것은 나를 위해 좋지 않다). (필자는 요소에 대한 바인딩을 처리하므로 이러한 요소의 주소가 변경되지 않을 것으로 예상됩니다.) 그래서 나는이 양동이를 발견했습니다. 이 목적에 도움이된다고 생각하십니까? 중요 : 푸시 백만 있으면되지만 필요에 따라 컨테이너를 조금씩 커야합니다.내 요소를 다시 할당 할 필요가 없습니다 (C++)?

답변

10

std::deque 요소를 뒤쪽이나 앞쪽에 추가하거나 제거 할 때 "요소 나 요소에 대한 참조가 무효화되지 않습니다."예, push_back 요소 만 제 위치에 있으면.

+0

고마워요! 크기를 조정하지 않고 푸시 백을 사용할 수 있습니까? resize는 요소를 움직일 수 있습니다. – user1132655

+0

@ user1132655 : 물론, 단지'push_back'. 왜 당신이'크기 조정 '을해야한다고 생각하니? 조기 최적화라고 생각합니다. –

+0

죄송합니다. 요청해야합니다. 크기를 조정하면 최적화가 내 요소를 변경할 수 있으므로이 경우에는 사용하지 말아야합니다. – user1132655

3

the documentation을주의 깊게 읽으면 시작 또는 끝 부분에 삽입하면 포인터가 무효화되지 않으며 포인터를 무효화한다는 것은 데이터가 복사 또는 이동되고 있음을 나타내는 기호임을 나타냅니다.

구성 방법은 각 요소가 개별적으로 할당되는 링크 된 목록과는 달리 성능상의 이유로 연결된 배열 집합으로 간주됩니다. 중간에있는 요소의 순서를 변경하면 데이터 이동이 필요합니다.

+2

더 많은 배열 배열과 비슷합니다. 링크 된 배열은 링크 된 목록보다 훨씬 나은 트래버스를 제공하지만 임의 액세스는 제공하지 않습니다. – Puppy

관련 문제