더북(TheBook)

1.4.2 std::vector 할당자

std::vector는 템플릿 매개변수에서 데이터 타입 다음에 할당자(allocator)를 전달할 수 있습니다. 이 기능을 이용하면 std::array의 단점을 해결할 수 있습니다.

사용자 정의 할당자를 사용하려면 정해진 인터페이스를 따라야 합니다. 벡터는 메모리 접근과 관련된 대부분의 동작에서 할당자 함수를 사용하므로 할당자는 allocate(), deallocate(), construct(), destroy() 등의 함수를 제공해야 합니다. 할당자는 메모리 할당과 해제, 그리고 여타 동작에서 데이터를 손상시키지 않도록 주의해야 합니다. 일반적인 힙 메모리 대신 자체적인 메모리 풀(memory pool) 또는 이와 유사한 자원을 사용하거나 자동 메모리 관리가 필요한 응용 프로그램을 만들어야 하는 경우에 사용자 정의 할당자를 사용하면 유용합니다.

결국 std::vectorstd::array에 대한 정말 좋은 대안이고, 크기, 증분 등의 관점에서 더욱 많은 유연성을 제공합니다. 배열과 벡터에서 공통으로 제공하는 기능은 서로 같은 점근적 시간 복잡도를 갖습니다. 다만 추가적인 기능에 대해서는 합리적인 수준의 추가 연산 비용이 필요합니다. 평균적으로 벡터의 성능은 배열에 비해 그리 나쁘지 않습니다. 그러므로 std::vector는 성능과 유연성으로 인해 실전에서 널리 사용되는 STL 컨테이너 중 하나입니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.