2010-05-07 55 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::tr1::bind)讓std::transform和/或std::for_each做的那些。

但是對於複製循環,似乎也有std::uninitialized_copy

+0

啊,'uninitialized_copy'正是我在找的東西。謝謝! – fredoverflow 2010-05-07 14:00:33

0

向量元素以相反的順序被破壞。

0

的STL依賴於allocators具有方法constructdestroy和其他類似uninitialized_fill(如在STL容器中默認的模板參數傳遞),但不是所有的人的範圍內工作。分配器,而不是容器,負責提供這些功能。如果你想編寫像STL一樣的矢量類,你還需要重新分配分配器。