2010-05-07 4 views
0

현재 재미를 위해 내 장난감 vector을 만들고 있는데 현재 또는 다음 표준 또는 부스트에 다음과 같은 것이 있는지 궁금합니다.파괴하고 copy_construct하는 알고리즘

template<class T> 
void destruct(T* begin, T* end) 
{ 
    while (begin != end) 
    { 
     begin -> ~T(); 
     ++begin; 
    } 
} 

template<class T> 
T* copy_construct(T* begin, T* end, T* dst) 
{ 
    while (begin != end) 
    { 
     new(dst) T(*begin); 
     ++begin; 
     ++dst; 
    } 
    return dst; 
} 

답변

1

std::vector는 개별 항목에의 할당의 구조 및 파괴 기능을 적용, 그래서 당신은 또한 std::transform 및/또는 std::for_each이 사람들을 할 수 있도록 (std::tr1::bind 같은) 바인더를 사용할 수 있습니다.

그러나 복사 루프의 경우에는 std::uninitialized_copy 인 것처럼 보입니다.

+0

아, 'uninitialized_copy'는 내가 찾고있는 것입니다. 감사! – fredoverflow

0

벡터 요소는 역순으로 소멸됩니다.

0

STL과는 uninitialized_fill 같은 방법 constructdestroy 등이 (STL 컨테이너의 기본 템플릿 매개 변수로 전달) allocators에 의존하지만, 그 모든이 범위에서 작동합니다. 컨테이너가 아닌 할당 자 (allocator)는 이러한 기능을 제공 할 책임이 있습니다. STL과 같은 자신의 벡터 클래스를 작성하려면 할당자를 재발 명해야합니다. 내가 잘못 아니에요 경우